当前位置:编程学习 > C#/ASP.NET >>

高分问一个数据绑定的基础问题

使用<%# Eval("id")%>来绑定Gridview里面的链接地址。为什么使用服务器控件HyperLink 和使用<a>的绑定方法不同。。
  <a href='info.aspx?id=<%# Eval("id") %>' runat="server">链接2</a>正确。
但 <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='info.aspx?id=<%# Eval("id") %>'>链接1</asp:HyperLink>错误。
必须改写成 <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# “info.aspx?id=”+Eval("id") %>'>链接1</asp:HyperLink>

哪位来给我说下原理。先谢谢了 --------------------编程问答-------------------- 只有在有数据源时才能使用<%# Eval(...)%>之类的,不管是a 还是hyperlink.它们一定应该在上层有数据源的控件中。
至于为什么写法不同,因为a是客户端控件,可以在任意位置插入绑定。而对于服务器控件,必需对一个控件的属性作完整的绑定才行。也就是属性要是一个完整的绑定表达式。
比如你的上例还可以写成NavigateUrl='<%# Eval("info.aspx?id={0}", "id")%>'

个人看法仅作参考。 --------------------编程问答-------------------- 在运行时计算数据绑定表达式。 

命名空间:System.Web.UI
程序集:System.Web(在 system.web.dll 中)

语法
C# 
public static Object Eval (
Object container,
string expression
)

参数
container
表达式根据其进行计算的对象引用。此标识符必须是以页的指定语言表示的有效对象标识符。 

expression
从 container 到要放置在绑定控件属性中的公共属性值的导航路径。此路径必须是以点分隔的属性或字段名称字符串,如 C# 中的 "Tables[0].DefaultView.[0].Price" 或 Visual Basic 中的 "Tables(0).DefaultView.(0).Price"。 



返回值
Object,它是数据绑定表达式的计算结果。 
备注
expression 参数值的计算结果必须为公共属性。 

尽管当您在应用程序快速开发 (RAD) 设计器(如 Visual Studio)中创建数据绑定时会自动调用此方法,但如果希望简化到要在浏览器上显示的文本字符串的转换操作,则还可以以声明方式使用此方法。为此,必须将 <%# 和 %> 标记放在数据绑定表达式的两头;这些标记也用于标准 ASP.NET 数据绑定。

当数据绑定到模板列表中的控件时,此方法尤其有用。

警告 
由于此方法在运行时使用反射执行后期绑定计算,因此与标准 ASP.NET 数据绑定语法相比,它会导致性能明显下降。
 

对于所有的列表 Web 控件,如 DataList、DataGrid 或 Repeater,container 参数值均应为 "Container.DataItem"。如果要对页进行绑定,则 container 参数值应为 "Page"。
=========================
以上内容来自msdn,注意其中红色字部分!

另,建议楼主用下面这种写法!
 
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl=' <%#   String.Format("info.aspx?id={0}"),Eval("id"))%> '> 链接1 </asp:HyperLink>   
--------------------编程问答-------------------- 1,2 楼正确


补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,