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

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

<asp:TextBox runat="server" Text="" /> 

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

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

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

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

例如:

  

会产生这样的输出:

<%= Now.ToShortDateString()%>

另一方面这个:

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

会产生这样的输出:

2011年7月27日

解决此问题的“常规”方法是根据您的需要在Page.Load事件处理程序或其他适当的事件处理程序中设置Label.Text属性,如下所示。 这是我认为大多数人更愿意这样做的方式,在我看来最容易理解。

标记:

  

码:

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

您可以以类似的方式在页面上设置文本。

 ' /> 

但为了使其工作,您需要DataBind对Page_Load的控件。 对于多个TextBox控件,您可以遍历每个控件并对其进行数据绑定,这样您就不必对每个控件进行硬编码。

我不确定你的ContextItem是什么,所以你必须修改我的代码。

选项1:不使用服务器控件

如果您没有访问服务器上的值,只需使用纯HTML而不是ASP.NET服务器控件:

  

选项2:使用Page.DataBind()

如果您将代码更改为使用<%#而不是<%= (如下所示)并调用Page.DataBind() ,它将起作用(我已对其进行了测试)。 将您的标记更改为:

 " /> 

在您的逻辑中,在Load事件中调用Page.DataBind() ,如下所示:

 protected void Page_Load(object sender, EventArgs e) { Page.DataBind(); } 

即使TextBox不包含在典型的“数据绑定”控件 (如Repeater或GridView DataBind() ,在控件上调用DataBind()也会强制它评估<%# ... %>语句。

Moof的评论(如下)是正确的。 这篇文章还提到了Page.DataBind()。

简短的回答是NO,你只能在数据绑定中使用这种代码,这意味着在GridView中。 但你可以在头部使用它。

我用它来为我的url添加前缀有时预定义的东西。 例

   

在这种情况下它的工作原理

希望能帮助到你。

当我尝试这个时,90%的时间我必须在<%%>周围使用单引号(”)而不是双引号(“”)。 在花费太多时间在其他任何事情之前尝试一下。