我似乎无法弄清楚为什么这不起作用。我需要将文本框绑定到内联表达式中的值。好像很简单吧?但这些都不奏效。有任何想法吗?提前谢谢。
<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />
<asp:textbox id="tbName" runat="server" Text='<%= "test" %>' />
编辑: 我应该提一下,这个页面后面没有代码,顶部只有以下指令。
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%@ Page Language="C#" %>
编辑:
我可以提出的唯一可行的解决方案是添加一个内联服务器脚本,就像这个。我希望我知道为什么内联表达式不起作用,除非你在数据绑定上下文中。
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
tbName.Text = "test";
}
</script>
答案 0 :(得分:15)
在Page_Load中你必须调用Page.DataBind()
<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />
工作。
&lt;%=%&gt;是一个缩短的response.Write(),永远不会作为任何服务器标签的属性。
&lt;%#%&gt;只有当conatainer是数据绑定时(例如你的页面),才能使用它。
&lt;%$%&gt;可用于访问资源文件中的数据。
编辑:您还可以查看How to 'bind' Text property of a label in markup这是一个非常相似的问题。
答案 1 :(得分:5)
如上所述,&lt;%=%&gt;在服务器控件声明中的任何位置都是非法的,除非内部标记被解析为内容(例如&lt; ItemTemplate&gt;在Repeater中)。
&lt;%#%&gt;作为控件属性的表达式有效,因为在控件上调用DataBind()时将评估这些表达式。
你使用Eval()看起来有点怀疑。根据示例,Eval()将使用当前Page对象作为绑定上下文,这意味着在调用DataBind()时,将绑定名为“test”的公共属性的值。除非您确实在Page类上定义了此属性,否则表达式永远不会计算为任何内容。
Eval()主要用于控件中的表达式,例如Repeater,GridView,ListView等,其中有一个使用模板绑定的数据项列表,并且您需要一种方法来访问属性当前数据项。
对于所有其他控件,只需在数据绑定表达式中使用普通代码表达式 - 它比Eval()更快,更直观,它依赖于运行时反射。
如果您想要使用&lt;%$%&gt;的更聪明的替代品完全避免数据绑定的语法,请转到此处:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
答案 2 :(得分:4)
使用<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />
并在页面加载事件中设置tbName.DataBind();
。
有关正在搜索有关内联表达式的更多信息的用户,请参阅以下链接。
ASP.net有以下inline expressions
Embedded code blocks <% ... %>
Displaying expression <%= ... %>
Directive expression <%@ ... %>
Data-binding expression <%# ... %>
Expression builder <%$ ... %>
Server-side comments block <%-- ... --%>
答案 3 :(得分:2)
尝试将runat =“server”添加到服务器元素。 否则,将不会在服务器上处理此元素。
编辑:实际上,“这是正确的”,这是行不通的;代码&lt;%= ...%&gt;无法在服务器标记中进行评估,只有例如&lt;%$ Resources:h1%&gt;等表达式答案 4 :(得分:2)
您可能需要文本框控件的命名空间
<%@ Import "System.Web.UI.WebControls" %>
答案 5 :(得分:1)
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox>