ASP.NET 内联代码、内联表达式、数据绑定表达式使用方法罗列(形式就是常说的尖括号 百分号 等于号 井号)

今天在作渭南电脑维修网的一个小功能时遇到了一些问题,所以特别列出,以备他日之用。javascript

首先对ASP.NET 内联代码、内联表达式、数据绑定表达式的概念进行罗列,详细概念以及基本的用法我就不在这里罗嗦了,请参照MSDN详细介绍,如下是列表:html

一、<% inline code %>:内联代码java

二、<%=inline expression %>:内联表达式express

三、<%# data-binding expression %>:数据绑定表达式服务器

内联代码我不多使用,因此也没什么心得能够拿来与你们分享,内联表达式、数据绑定表达式是我平常工做中必备之利器。spa

园子里一篇文章写的不错,在这里给你们推荐一下:《ASP.NET前台代码绑定后台变量方法总结code

基本用例展现:server

//后台代码
public string name;
protected void Page_Load(object sender, EventArgs e)
{
     Page.DataBind();//显示绑定数据,数据绑定表达式获值先天条件
}
//前台代码 不论是内联表达式仍是数据绑定表达式都能获取name的值
<%= name %>
<%# name %>//经过数据绑定表达式获值时别忘记在后台调用Page.DataBind() 不然<%# name %>获取的值将为空
看看下边的代码你看出什么问题了吗?
<asp:Repeater ID="Repeater1" runat="server">
     <ItemTemplate>
          <asp:HyperLink ID="linkID" runat="server" CssClass="<%#Eval("CSS") %>" NavigateUrl='javascript:MethodName(<%# Eval("ID") %>)'>[关注]</asp:HyperLink>    </ItemTemplate> 
</asp:Repeater>

 正确写法:htm

<asp:Repeater ID="Repeater1" runat="server">
     <ItemTemplate>                               //服务器标记的格式不正确。 属性使用双引号调用数据绑定表达式报错,改成单引号便可解决问题
    <asp:HyperLink ID="linkID" runat="server" CssClass='<%#Eval("CSS") %>' NavigateUrl='<%# "javascript:MethodName("+Eval("ID")+");"%>'>[关注]</asp:HyperLink> //对于NavigateUrl属性对执行的javascript方法进行动态参数赋值时,前边错误的写法根本获取不到其实际的值,实际输出竟然是"javascript:MethodName(<%# Eval("ID") %>)"与咱们要的结果大相径庭,经过《ASP.NET HyperLink Eval in a Javascript function》学到了老外的精髓,使用变相思惟,咱们直接经过数据绑定表达式进行字符串的拼接,这样就获得了咱们预期的效果。
 </ItemTemplate> 
</asp:Repeater>
内联表达式<%= %>和数据绑定表达式<%# %>的区别。
    一、在后台代码中, 数据绑定表达式内联表达式惟一不一样的,就是须要调用DataBind方法。只有执行了相应控件的DataBind方法,前台代码中这些控件中使用<%# %>的绑定才会发生(而且控件内部的全部绑定也会发生,好比又嵌套了一个绑定后台数据的控件),不然得话将不会被赋值,而是默认空值。上面咱们用的 是Page的DataBind方法,那么整个页面全部绑定都会执行。固然,若是咱们只执行DataList1或者DropDownList1的 DataBind方法,那么只有相应控件的绑定才会发生。须要注意的是,这里说的须要执行DataBind包括了显示和隐式执行,有些数据绑定类控件,当 它们经过 DataSourceID 属性绑定到数据源控件时,会经过隐式调用 DataBind 方法来执行绑定。这时就没必要显示的再次调用了。

    二、两种绑定方式上,他们的约束基本相同,都要求与属性匹配,出如今他们能够出现的位置。后者的使用位置更普遍,尤为是支持服务器端控件和绑定数据集合。后台代码方面,后者须要调用DataBind才能完成绑定,前者则没有这方面要求。这里主要区别一下二者在执行机制上的区别:<%=...%>是 在程序执行时调用(应该是在页面的RenderControl事件过程当中完成的,也就是一般状况下咱们能够看到的后台代码都执行完毕后再去到前台代码中进 行赋值绑定),而<%#... %>是在DataBind()方法以后被调用,一旦调用了DataBind(),则它对应的控件将绑定变量,所以,请注意:若是在 DataBind()后再修改变量,那么绑定的就不是最新值了,这就须要在完成变量的赋值后,再去DataBind()。其实这两种方式,它的运行过程可 以在VS中经过设置断点来看看,看二者的绑定赋值分别是在何时发生的。blog

相关文章
相关标签/搜索