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

本文关键字:lt 文本 gt 属性 初始化 代码 是否 TextBox- NET 可以使 ASP | 更新日期: 2023-09-27 18:03:30


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

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

不幸的是,以上内容无法完成
问题是这个文本框元素在页面中自我重复了好几次,我的问题是:

有什么建议可以让它更干净,然后在后面的代码中一遍又一遍地写吗
感谢Adler

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

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

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

例如:

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

将产生以下输出:

<%=现在.ToShortDateString((%>

另一方面:

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

将产生以下输出:

2011年7月27日

解决此问题的"正常"方法只是根据需要在Page.Load事件处理程序或其他适当的事件处理程序中设置Label.Text属性,如下所示。我相信大多数人都喜欢这样做,在我看来这是最容易理解的。

标记:

<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:不使用服务器控件

如果您没有访问服务器上的值,只需使用纯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()也会强制它评估<%# ... %>语句。

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

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

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

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

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

简短的答案是NO,您只能将这种代码与数据绑定一起使用,例如,这意味着在GridView中。但是你可以在头部使用这个。

我用它来给我的url加前缀,有时用一些预定义的东西。示例

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

在这种情况下,它是有效的。

希望能有所帮助。

90%的时候,当我尝试这样做时,我必须在<%%>周围使用单引号(''(而不是双引号("(。在你把太多时间花在其他事情上之前,试一试。