笔记:数据绑定表达式(一)

数据绑定表达式必须包含在<%#和%>字符之间。格式如下:

<tagprefix:tagname property='<%# data-binding expression %>' runat="server" />

 

或者如下:

<%# data-binding expression %>

ASP.NET 支持分层数据绑定模型,数据绑定表达式使用 Eval 和 Bind 方法将数据绑定到控件,并将更改提交回数据库。
Eval 方法是静态单向(只读)方法,所以Eval 函数用于单向(只读)绑定,该方法采用数据字段的值作为参数并将其作为字符串返回。
Bind 方法支持读/写功能,所以Bind 函数用于双向(可更新)绑定。该方法可以检索数据绑定控件的值并将任何更改提交回数据库。
XPath 方法支持对XML类型的数据源提供支持。

数据绑定表达式都可以出现在页面的哪个位置呢?

一,可以将数据绑定表达式包含在服务器控件或者普通的html元素的开始标记中属性名/属性值对的值侧。例如:

<asp:TextBox ID="TextBox1" runat="server" Text='<%#数据绑定表达式%>' ></asp:TextBox><br />

注意条款:此时数据的绑顶表达式可以是一个变量,也可以是一个带返回值的C#或者VB.NET方法,还可以是某个控件的某个属性的值,也可以是C#或者VB.NET对象的某个字段或者属性的值等等。当然也可以直接就是一个字符串,例如"hello"。
如果此时的数据绑定表达式是Eval("数据库中某个表的某个字段")等,那么必须把TextBox1放在某个循环显示的控件的模板中才正确,否则会提示:Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。其实就是想让你把TextBox1放在像Repeater,DataList,GridView这样的控件的模板中。

二,数据绑定绑定表达式包含在在页面中的任何位置。例如:

<form id="form1" runat="server">
    
<div>
     
<%#Eval("数据绑定表达式1")%>  
     
<%#Eval("数据绑定表达式2")%>
        
    
</div>
 
</form>

同样遵循"一"的注意条款。
如果此时的数据绑定表达式是Eval("数据库中某个表的某个字段")等,那么必须把 <%#Eval("数据绑定表达式1")%>   <%#Eval("数据绑定表达式2")
%>  放在像Repeater,DataList,GridView这样的控件的模板中。

三,可以将数据绑定表达式包含在Javascript代码中,从而实现在Javascript中调用C#或者VB.NET的方法。例如:
Deafult2.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
    
<script language ="javascript" type="text/javascript">
    
function GetStr()
    
{
       
var
 a; 
       a 
= ''

       a
='<%#CSharpToJavascript()%>'         //调用c#的方法

       alert(a);
    }

    
</script>    
</head>

<body>
    
<form id="form1" runat="server">
    
<div>
        
<input id="Button1" type="button" value="Javascript调用c#的方法!" onclick="GetStr()" /</div> 
    
</form>

</body>
</html>

Default2.cs:

using System;
using
 System.Data;
using
 System.Configuration;
using
 System.Collections;
using
 System.Web;
using
 System.Web.Security;
using
 System.Web.UI;
using
 System.Web.UI.WebControls;
using
 System.Web.UI.WebControls.WebParts;
using
 System.Web.UI.HtmlControls;

public partial class
 Default2 : System.Web.UI.Page
{
    
protected void Page_Load(object
 sender, EventArgs e)
    {
        Page.DataBind();
//方法有返回值的要先绑定,才能实现Javascript调用c#的方法!

    }
    
public string
 CSharpToJavascript()
    {
        
return "Javascript调用c#的方法!"
;
    }
}

数据绑定表达式都可以是什么类型呢?
1,可以是一个变量
例如:<asp:Label ID="Label1" runat="server" Text="<%#变量名%>"></asp:Label>
2,可以是服务器控件的属性值
例如: <asp:Label ID="Label1" runat="server" Text="<%#TextBox2.Text %>"></asp:Label>
3,可以是一个数组等集合对象
例如把一个数组绑定到列表控件,例如ListBox等,或者Repeater,DataList,GridView这样的控件等,此时只需要把属性DataSource='<%# 数组名%>' 。
4,可以是一个表达式
例如:Person是一个对象,Name和City是它的2个属性,则数据绑定表达式可以这样写:
<%#(Person.Name + " " + Person.City)%>。
5,可以是一个方法
例如:<%#GetUserName()%>。GetUserName()是一个已经定义的C#方法,一般要求有返回值。
6,可以是用Eval,DateBinder.Eval取得的数据表的字段,这个是最常见的了,不再举例。

注意:如果数据绑定表达式作为属性的值,只要数据绑定表达式中没有出现双引号,那么<%#数据绑定表达式%>的最外层用双引号或者单引号都可以。如果数据绑定表达式中出现双引号,则<%#数据绑定表达式%>的最外层最好要用单引号。

与数据库有关而且绑定到DataView,DataTable,DataSet 等数据源的数据绑定表达式都有那些?

1,<%#DataBinder.Eval(Container.DataItem,"字段名")%>
      <%#DataBinder.Eval(Container.DataItem,"字段名","{0:c}") %>
     还有2种不常用的:
      <%# DataBinder.Eval(Container,"DataItem.字段名")%> 
      <%# DataBinder.Eval(Container,"DataItem.字段名",{0:c})%> 
      Container.DataItem相当于数据库中某个表或者视图中的一行记录,而一行可以有很多列。
      最后一个参数和
String.Format的形式一样。例如c代表货币,p代表百分号,d代表短日期格式显示,f代表浮点数现实,f3代表小数点后三为,一次类推。

        
使用三目运算符?:的例子:
 <%# DataBinder.Eval(Container.DataItem, "字段名").ToString().Trim().Length>16?DataBinder.Eval(Container.DataItem, "字段名").ToString().Trim().Substring(0,16):DataBinder.Eval(Container.DataItem, "字段名"
).ToString().Trim() %>

2,<%#Eval("字段名")%>
     <%#Eval("字段名","{0:c}")%>
     .NET 2.0新出现的一个方法。和DataBinder.Eval()等价。
     最后一个参数和

String.Format的形式一样。例如c代表货币,p代表百分号,d代表短日期格式显示,f代表浮点数现实,f3代表小数点后三位,一次类推。

    
使用三目运算符的例子:
<%#(Eval("性别")).ToString() =="True"?"男":"女"%> 
 性别字段类型为:是/否(Access),bit(sql server)
      使用方法调用的例子:
  <%# GetUserPhoto(Eval("PhotoPath")) %>    
     GetUserPhoto()的定义:
3, <%#((DataRowView)Container.DataItem)["字段名"] %>
      <%# string.Format("{0:c}", ((DataRowView)Container.DataItem)["字段名"])%>
      Container.DataItem相当于数据库中某个表或者视图中的一行记录,而一行可以有很多列。  
      用
String.Format方法设定字段的显示样式。例如c代表货币,p代表百分号,d代表短日期格式显示,f代表浮点数现实,f3代表小数点后三为,一次类推。
       
       类型转换例子:<%# (int)((DataRowView)Container.DataItem)["字段名1"]*(int)((DataRowView)Container.DataItem)["字段名2"]%>    意思是2个字段相乘。
    

上面三种绑定方法的效率:Eval方法执行时候会调用DataBinder.Eval方法,DataBinder.Eval方法在运行时使用反射执行后期绑定计算,会导致性能明显下降。所以会导致性能明显下降。所以三者中<%#((DataRowView)Container.DataItem)["字段名"] %>的性能最好。

转载于:https://www.cnblogs.com/shineqiujuan/archive/2008/09/22/1296005.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程实战~Thread-Per-Message模式

我们曾经把并发编程领域的问题总结为三个核心问题&#xff1a;分工、同步和互斥。其中&#xff0c;同步和互斥相关问题更多地源自微观&#xff0c;而分工问题则是源自宏观。我们解决问题&#xff0c;往往都是从宏观入手&#xff0c;在编程领域&#xff0c;软件的设计过程也是先…

水面反光如何拍摄_如何在雨中拍摄,这些技巧会让你的摄影更完美

雨是柔弱的&#xff0c;是世界上最轻灵的东西&#xff0c;敲不响那钢筋水泥造的高楼。而瓦屋则不同&#xff0c;雨滴在上面&#xff0c;叮叮当当的&#xff0c;立即奏出悦耳的声音。身在小屋的人也就有了在雨中亲近自然的福气。而且在雨天睡觉是最舒服的了~在阴雨天气中最熟悉的…

2018全球最强物联网公司榜单揭晓|20家企业物联网战略大起底!

来源&#xff1a; 物联网智库丨公众号IDG旗下杂志《NetWork World》近期公布了全球最强物联网公司名单。本文根据入选评语&#xff0c;对20家企业战略布局进行搜集整理&#xff0c;供业内人士参考&#xff01;根据Gartner预测&#xff0c;到2020年将有超过200亿台联网设备。全球…

Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

The lxml.etree Tutorial &#xff1a;https://lxml.de/tutorial.html python3 解析 xml&#xff1a;https://www.cnblogs.com/deadwood-2016/p/8116863.html 微软文档&#xff1a; XPath 语法 和 XPath 函数 W3school Xpath 教程&#xff1a;http://www.w3school.com.cn/xp…

Java并发编程实战~生产者-消费者模式

前面我们在《Worker Thread 模式》中讲到&#xff0c;Worker Thread 模式类比的是工厂里车间工人的工作模式。但其实在现实世界&#xff0c;工厂里还有一种流水线的工作模式&#xff0c;类比到编程领域&#xff0c;就是生产者 - 消费者模式。 生产者 - 消费者模式在编程领域的…

AI界的七大未解之谜:OpenAI丢出一组AI研究课题

来源&#xff1a;三体智讯今天&#xff0c;OpenAI在官方博客上丢出了7个研究过程中发现的未解决问题。OpenAI希望这些问题能够成为新手入坑AI的一种有趣而有意义的方式&#xff0c;也帮助从业者提升技能。OpenAI版AI界七大未解之谜&#xff0c;现在正式揭晓——丨1. Slitherin难…

vue 前端商城框架_前端工程师要掌握几个Vue框架

vue是一套用于构建用户界面的渐进式JavaScript框架&#xff0c;简单说Vue是类似于view的前端框架。vue开发核心是关注视图层&#xff0c;同时它更加容易与第三方库结合&#xff0c;再者我们在现有的项目中可以直接整合一起。目前vue技术社区在英文或中文都非常丰富&#xff0c;…

Python 模块 requests 模拟登录豆瓣 并 发表动态

如何抓取 WEB 页面&#xff1a;http://blog.csdn.net/chenguolinblog/article/details/45024643github 上一个关于模拟登录的项目&#xff1a;https://github.com/xchaoinfo/fuck-login Python爬虫之模拟登录总结&#xff1a;http://blog.csdn.net/churximi/article/details/50…

华为云BU总裁:如何把AI从噱头变为生产力?

来源&#xff1a;亿欧网 作者&#xff1a;张之颖“别跟着喊口号&#xff0c;少看朋友圈。…人工智能在中国被过分炒作了&#xff0c;现在国内人工智能已被娱乐化。不是做两个刷脸应用、搞一个APP就叫做人工智能。”华为云BU总裁郑叶来接受环球网记者的采访时表示&#xff0c;华…

Python 爬虫框架 - PySpider

Python爬虫进阶四之PySpider的用法&#xff1a;http://cuiqingcai.com/2652.html 网络爬虫剖析&#xff0c;以Pyspider为例&#xff1a;http://python.jobbole.com/81109 Python爬虫利器六之PyQuery的用法&#xff1a;https://cuiqingcai.com/2636.html 爬虫框架pyspider个人总…

AI技术加持,让协作机器人更安全

来源&#xff1a;机器人创新生态丨公众号来自众家新创公司与实验室的碰撞侦测与追踪技术&#xff0c;将使得在人类与其他移动物体周边的协作机器人更安全。一个美国圣地亚哥大学&#xff08;University of San Diego&#xff09;的团队便开发了一种更快速的算法&#xff0c;能协…

捕获异常_Recover捕获异常

“ 本文来源于《The Go Programming Language》”5.10. Recover捕获异常通常来说&#xff0c;不应该对panic异常做任何处理&#xff0c;但有时&#xff0c;也许我们可以从异常中恢复&#xff0c;至少我们可以在程序崩溃前&#xff0c;做一些操作。举个例子&#xff0c;当web服务…

仿msn弹出窗口

msnMessage.js文件代码&#xff1a; Code1 /** 2 ** 3 ** 类名&#xff1a;msnMessage 4 ** 功能&#xff1a;提供类似MSN消息框 5 ** 示例&#xff1a; 6 --------------------------------------------------------------------------------…

CPU诞生记|CPU制造全过程详解

来源&#xff1a;电子产品世界CPU(Centralprocessingunit)是现代计算机的核心部件&#xff0c;又称为“微处理器”。对于PC而言&#xff0c;CPU的规格与频率常常被用来作为衡量一台电脑性能强弱重要指标。Intelx86架构已经经历了二十多个年头&#xff0c;而x86架构的CPU对我们大…

二维数组 类型_Java第六章 | 二维数组的创建及使用、数组排序算法

二维数组的创建及使用1、二维数组的创建2、二维数组初始化3、使用二维数组二维数组的创建声明二维数组的方法有两种&#xff0c;语法如下所示&#xff1a;数组元素类型 数组名字[ ][ ];数组元素类型[ ][ ] 数组名字;数组元素类型&#xff1a;决定了数组的数据类型&#xff0c;它…

Semaphore及其用法

1、Semaphore 是什么 Semaphore 通常我们叫它信号量&#xff0c; 可以用来控制同时访问特定资源的线程数量&#xff0c;通过协调各个线程&#xff0c;以保证合理的使用资源。 比如&#xff1a;停车场入口立着的那个显示屏&#xff0c;每有一辆车进入停车场显示屏就会显示剩余…

sklearn 逻辑回归Demo

逻辑回归案例 假设表示 基于上述情况&#xff0c;要使分类器的输出在[0,1]之间&#xff0c;可以采用假设表示的方法。 设 h θ ( x ) g ( θ T x ) h_θ (x)g(θ^T x) hθ​(x)g(θTx)&#xff0c; 其中 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​…

URL原理、URL编码、URL特殊字符、输入URL到页面显示

​From&#xff1a;http://blog.csdn.net/zmx729618/article/details/51381655 From&#xff1a;http://www.cnblogs.com/coco1s/p/5038412.html HTML URL 编码参考手册&#xff1a;https://www.w3cschool.cn/htmltags/html-urlencode.html http://www.w3school.com.cn/t…

记忆模糊、记忆泛化的关键分子开关被发现

来源&#xff1a;brainnews2018年3月12日&#xff0c;Nature Medicine杂志在线刊登了麻省总医院Amar Sahay研究组的最新重要工作&#xff0c;他们发现了一种细胞骨架蛋白Actin-binding LIM protein 3 (ABLIM3)&#xff0c;降低该蛋白的表达水平可以增强海马齿状回细胞&#xff…

240多个jQuery插件 (转)

概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) &#xff0c;这是其它的 js 库所不及的&#xff0c;它兼容 CSS3&#xff0c;还兼容各种浏览器&#xff08;IE 6.0, FF 1.5, Safari 2.…