ASP.NET TextBox - 是否可以使用行代码<%%>初始化文本属性

Adl*_*ler 6 c# vb.net asp.net


我需要用一些其他地方的属性来初始化文本框元素的text属性,而实际上我可以从代码中执行此操作,但如果可以这样做会更方便:

<asp:TextBox runat="server" Text="<%= new ContextItem("title").Value %>" />
Run Code Online (Sandbox Code Playgroud)

不幸的是上面
的问题无法解决.问题是这个文本框元素在页面中重复了几次,我的问题是:

是否有任何建议如何使其更清洁,然后在代码背后一次又一次地写它?
谢谢,阿德勒

pse*_*der 3

好的,这里的基本问题是,如果您使用内联表达式,则不能使用它在绑定上下文之外设置服务器端控件的属性(使用绑定表达式)。我推断这可能是因为这些内联表达式的评估时间。但是,您可以通过这种方式呈现客户端标记。如果您想将功能纯粹保留在 aspx 文件中,则可以这样做。

编辑:根据 Justin Keyes 的输入,似乎可以使用绑定表达式来设置属性。您需要手动调用Page.DataBind()以触发文本框来计算表达式(请参阅下面的答案)。

例如这个:

<asp:Label ID="lbl" runat="server" Text="<%= Now.ToShortDateString() %>"  />
Run Code Online (Sandbox Code Playgroud)

将产生以下输出:

<%= Now.ToShortDateString() %>

另一方面:

<%= "<span>" & Now.ToShortDateString() & "</span>"%>

将产生以下输出:

2011年7月27日

解决此问题的“正常”方法只是根据您的需要Label.Text在事件处理程序或另一个适当的事件处理程序中设置属性,如下所示。Page.Load我相信这是大多数人更喜欢的方式,而且在我看来也是最容易理解的。

标记:

<asp:Label ID="lbl" runat="server" />
Run Code Online (Sandbox Code Playgroud)

代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    lbl.Text = Now.ToShortDateString()
End Sub
Run Code Online (Sandbox Code Playgroud)