[英]ASP.NET TextBox - is it possible to initialize text attribute with in line code <% %>
我需要用一些其他地方的屬性來初始化文本框元素的text屬性,而實際上我可以從代碼中執行此操作,但如果可以這樣做會更方便:
<asp:TextBox runat="server" Text="<%= new ContextItem("title").Value %>" />
不幸的是上面不能做..
問題是這個文本框元素在頁面中重復多次,我的問題是:
是否有任何建議如何使其更清潔,然后在代碼背后一次又一次地寫它?
謝謝,阿德勒
好的,所以這里的基本問題是,如果你使用內聯表達式,你不能使用它來設置綁定上下文之外的服務器端控件的屬性(使用綁定表達式)。 我推斷這可能是因為評估這些內聯表達式的時間。 但是,您可以通過這種方式呈現客戶端標記。 如果您希望將功能完全保留在aspx文件中,則可以使用此方法。
編輯:根據Justin Keyes的輸入,似乎可以使用綁定表達式來設置屬性。 您需要手動調用Page.DataBind()
來觸發文本框來評估表達式(請參閱下面的答案)。
例如:
<asp:Label ID="lbl" runat="server" Text="<%= Now.ToShortDateString() %>" />
會產生這樣的輸出:
<%= Now.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()
,在控件上調用DataBind()
也會強制它評估<%# ... %>
語句。
Moof的評論(如下)是正確的。 這篇文章還提到了Page.DataBind()。
您可以以類似的方式在頁面上設置文本。
<asp:TextBox id="TextBox1" runat="server" Text='<%#GetValue('Title)%>' />
但為了使其工作,您需要DataBind對Page_Load的控件。 對於多個TextBox控件,您可以遍歷每個控件並對其進行數據綁定,這樣您就不必對每個控件進行硬編碼。
我不確定你的ContextItem是什么,所以你必須修改我的代碼。
簡短的回答是NO,你只能在數據綁定中使用這種代碼,這意味着在GridView中。 但你可以在頭部使用它。
我用它來為我的網址添加前綴有些預定義的東西。 例
<script src="<%=Utils.GetGeneralPrefix()%>/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
在那種情況下它有效。
希望能幫助到你。
當我嘗試這個時,90%的時間我必須在<%%>周圍使用單引號('')而不是雙引號(“”)。 在花費太多時間在其他任何事情之前嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.