[英]using <%= %> or <%# %> with runat=server in ASP.NET
我有一個看起來像這樣的Web控件
public class Foo : WebControl { [Bindable(true)] [Category("Default")] [DefaultValue("")] [Localizable(true)] public string Bar { get; set; } protected override void Render(HtmlTextWriter output) { output.WriteLine(Bar); } }
我想把這個webcontrol放在我的aspx頁面中,如下所示:
<cc1:Foo Bar="<%= Fa.La.La %>/otherstuff" runat="server" />
(顯然這個代碼被簡化以顯示問題)
在我的Render方法中,不評估變量Fa.La.La。 它以原始文本“<%= Fa.La.La%>”的形式出現。如何評估它?
我並不特別說明如何傳入變量。如果變量可以在<%#...%>傳入時進行評估,那么工作正常。 關鍵是我在調用Render()方法之前/我想要評估一些服務器端變量。
我唯一能想到的是使用正則表達式來獲取<%= ...%>的內容並使用反射或其他東西,但必須有一種更優雅的方式來做到這一點。
這個問題與使用runat = server在href <%= xx%>中使用服務器變量非常相似,但它並不完全相同,因為沒有一個有用的答案。
好吧,首先你應該清楚兩個標簽之間的區別。 這里有一些我已經閱讀並實際使用的要點..
<%=
表達式在渲染時計算 <%#
表達式在DataBind()
時進行計算,如果未調用DataBind(),則根本不進行計算。 <%#
表達式可用作服務器端控件中的屬性。 <%=
表達式不能。 在MSDN博客上閱讀更多內容
您必須使用綁定表達式<%# expr %>
。
<cc1:Foo Bar='<%# String.Concat(Fa.La.La,"/otherstuff")%>' runat="server" />
並在代碼隱藏中調用DataBind()
方法。
public void page_load()
{
DataBind();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.