ASP.NET TextBox-是否可以使用行内代码<;%%初始化文本属性>
本文关键字:lt 文本 gt 属性 初始化 代码 是否 TextBox- NET 可以使 ASP | 更新日期: 2023-09-27 18:03:30
我需要用来自其他地方的属性初始化文本框元素的文本属性,而实际上我可以简单地从代码中执行此操作,但如果可以这样做,会更方便:
<asp:TextBox runat="server" Text="<%= new ContextItem("title").Value %>" />
不幸的是,以上内容无法完成
问题是这个文本框元素在页面中自我重复了好几次,我的问题是:
有什么建议可以让它更干净,然后在后面的代码中一遍又一遍地写吗
感谢Adler
好的,所以这里的基本问题是,如果使用内联表达式,则不能使用它在绑定上下文之外设置服务器端控件的属性(使用绑定表达式(。我推断这可能是因为这些内联表达式的求值时间。但是,您可以用这种方式呈现客户端标记。如果你想把功能完全保留在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%的时候,当我尝试这样做时,我必须在<%%>周围使用单引号(''(而不是双引号("(。在你把太多时间花在其他事情上之前,试一试。