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%的时间我必须在<%%>周围使用单引号(”)而不是双引号(“”)。 在花费太多时间在其他任何事情之前尝试一下。