簡體   English   中英

在ASP.NET中使用<%=%>或<%#%>和runat = server

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM