5

私はこのようなWebコントロールを持っています

パブリッククラスFoo:WebControl
{{
  [Bindable(true)]
  [Category( "Default")]
  [DefaultValue( "")]
  [ローカライズ可能(true)]
  public string Bar {get; セットする; }

  保護されたオーバーライドvoidRender(HtmlTextWriter output)
  {{
    output.WriteLine(Bar);
  }
}

このWebコントロールを次のようにaspxページに配置したいと思います。

<cc1:Foo Bar = "<%= Fa.La.La%> / otherstuff" runat = "server" />

(明らかに、このコードは問題を示すために簡略化されています)

私のRenderメソッドでは、変数Fa.La.Laは評価されません。生のテキスト「<%= Fa.La.La%>」として届きます。どうすれば評価できますか?

変数がどのように渡されるかは特にわかりません。変数が<%#...%>として渡された場合に変数を評価できる場合は、正常に機能します。重要なのは、Render()メソッドが呼び出される前/呼び出されている間に評価したいサーバー側の変数がいくつかあるということです。

私が考えることができる唯一のことは、正規表現を使用して<%= ...%>のコンテンツを取得し、リフレクションなどを使用することですが、これを行うには、よりエレガントな方法が必要です。

この質問は、href <%= xx%>でrunat = serverを使用してサーバー変数を使用するのと非常によく似ていますが、有用な回答がなかったため、まったく同じではありません。

4

2 に答える 2

6

まず、両方のタグを明確に区別する必要があります。これが私が実際に読んで使用したいくつかのポイントです。

  • 式は<%=レンダリング時に評価されます
  • <%#式は一度DataBind()に評価され、DataBind()が呼び出されない場合はまったく評価されません。
  • <%#式は、サーバー側のコントロールのプロパティとして使用できます。<%=式はできません。

詳細については、MSDNブログをご覧ください。

于 2012-08-13T05:01:32.330 に答える
3

バインディング式を使用する必要があります<%# expr %>

<cc1:Foo Bar='<%# String.Concat(Fa.La.La,"/otherstuff")%>' runat="server" /> 

DataBind()コードビハインドでメソッドを呼び出します。

public void page_load()
{
  DataBind();
}
于 2012-08-13T04:21:02.260 に答える