ASP.net内联表达式问题

ASP.net内联表达式问题,asp.net,data-binding,Asp.net,Data Binding,我似乎不明白为什么这在下面不起作用。我需要将文本框绑定到内联表达式中的值。看起来很简单,对吧?但这两种方法都不管用。有什么想法吗?提前谢谢 <asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> <asp:textbox id="tbName" runat="server" Text='<%= "test" %>' /> 编辑: 我应该提到的是,这个页面没有代

我似乎不明白为什么这在下面不起作用。我需要将文本框绑定到内联表达式中的值。看起来很简单,对吧?但这两种方法都不管用。有什么想法吗?提前谢谢

<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>

私有无效页面加载(对象发送方,System.EventArgs e)
{
tbName.Text=“测试”;
}

尝试将runat=“server”添加到服务器元素。 否则,此元素将不会在服务器上处理


编辑:事实上,“这是正确的”,这不起作用;无法在服务器标记中计算代码,只有表达式,例如,您可能需要textbox控件的命名空间

<%@ Import "System.Web.UI.WebControls" %>

如上所述,在服务器控件声明中的任何位置都是非法的,除非内部标记被解析为内容(例如在中继器中)

作为控件属性的表达式有效,因为在控件上调用DataBind()时将对这些表达式求值

不过,您对Eval()的使用看起来有点可疑。根据示例,Eval()将使用当前页面对象作为绑定上下文,这意味着在调用DataBind()时将绑定名为“test”的公共属性的值。除非您在Page类上实际定义了此属性,否则表达式将永远不会计算为任何值

Eval()主要用于诸如Repeater、GridView、ListView等控件中的表达式中,其中有一个使用模板绑定的数据项列表,您需要一个能够访问当前数据项属性的方法

对于所有其他控件,只需在数据绑定表达式中使用普通代码表达式即可-它比依赖于运行时反射的Eval()更快、更直观

如果您想要一个更聪明的替代方案,使用语法完全避免数据绑定,请转到此处:


在加载的页面中,您必须为

这是一个相似的问题。

使用


不起作用,我只得到“此上下文中不支持代码块”。我应该提到的是,我的页面没有代码隐藏,我不确定这是否重要。很抱歉,这是我的输入错误。控件设置为runat=server,但仍然无法工作。尝试过,但仍然没有成功。您也可以尝试System.Web.UI。这就是Eval函数的定义。
<%@ Import "System.Web.UI.WebControls" %>
<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />