Jam*_*mes 9 asp.net data-binding
我似乎无法弄清楚为什么这不起作用.我需要将文本框绑定到内联表达式中的值.好像很简单吧?但这些都不奏效.有任何想法吗?提前致谢.
<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />
<asp:textbox id="tbName" runat="server" Text='<%= "test" %>' />
Run Code Online (Sandbox Code Playgroud)
编辑:我应该提到这个页面后面没有代码,顶部只有以下指令.
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%@ Page Language="C#" %>
Run Code Online (Sandbox Code Playgroud)
编辑:
我可以提出的唯一可行的解决方案是添加一个内联服务器脚本,就像这个一样.我希望我知道为什么内联表达式不起作用,除非你在数据绑定上下文中.
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
tbName.Text = "test";
}
</script>
Run Code Online (Sandbox Code Playgroud)
Mar*_*tin 15
在Page_Load中你必须调用Page.DataBind()
<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />
Run Code Online (Sandbox Code Playgroud)
上班.
<%=%>是一个缩短的response.Write(),对于任何服务器标记永远不会作为属性有效.
只有当数据库是数据绑定(在您的情况下为页面)时,才能使用<%#%>.
<%$%>可用于访问资源文件中的数据.
编辑:您还可以看一下如何在标记中"绑定"标签的Text属性, 这是一个相似的问题.
如上所述,<%=%>在服务器控件声明中的任何位置都是非法的,除非内部标记被解析为内容(例如,在Repeater中的<ItemTemplate>).
<%#%>作为控件属性的表达式有效,因为在控件上调用DataBind()时将评估这些表达式.
你使用Eval()看起来有点怀疑.根据示例,Eval()将使用当前Page对象作为绑定上下文,这意味着在调用DataBind()时,将绑定名为"test"的公共属性的值.除非您实际在Page类上定义了此属性,否则表达式永远不会计算任何内容.
Eval()主要用于控件中的表达式,如Repeater,GridView,ListView等,其中有一个使用模板绑定的数据项列表,并且您需要一种方法来访问当前属性数据项.
对于所有其他控件,只需在数据绑定表达式中使用普通代码表达式 - 它比Eval()更快,更直观,它依赖于运行时反射.
如果你想要一个更聪明的替代方法,使用<%$%>语法完全避免数据绑定,请转到此处:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
| 归档时间: |
|
| 查看次数: |
10533 次 |
| 最近记录: |