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

时间:2011-07-26 20:59:27

标签: c# asp.net vb.net


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

<asp:TextBox runat="server" Text="<%= new ContextItem("title").Value %>" />

不幸的是,上述情况无法完成。
问题是这个文本框元素在页面中重复多次,我的问题是:

是否有任何建议如何使其更清洁,然后在后面的代码中反复写入?
谢谢, 阿德勒

5 个答案:

答案 0 :(得分:3)

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

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

例如:

<asp:Label ID="lbl" runat="server" Text="<%= Now.ToShortDateString() %>"  />

将产生此输出:

  

&lt;%= Now.ToShortDateString()%&gt;

另一方面,这个:

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

将产生此输出:

  

2011年7月27日

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

标记:

<asp:Label ID="lbl" runat="server" />

代码:

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

答案 1 :(得分:2)

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

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

<input ID="Textbox1" Type="Text"  
    Value='<%= new ContextItem("title").Value %>' />

选项2:使用Page.DataBind()

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

<asp:TextBox runat="server" Text="<%# new ContextItem("title").Value %>" />

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

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

即使TextBox未包含在典型的“数据绑定”控件(如Repeater或GridView)中,在控件上调用DataBind()也会强制它评估{{1} }陈述。

Moof的评论(如下)是正确的。 This post还提到了Page.DataBind()。

答案 2 :(得分:2)

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

<asp:TextBox id="TextBox1" runat="server" Text='<%#GetValue('Title)%>' />

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

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

答案 3 :(得分:1)

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

我用它来为我的网址添加前缀,有时会预定义。实施例

  <script src="<%=Utils.GetGeneralPrefix()%>/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

在这种情况下,它有效。

希望它有所帮助。

答案 4 :(得分:0)

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