あなたは<%=...%>
構文についてほとんど正しいです。これは、内部で何が起こるかの例です。
<script runat="server">
public string SomeProperty { get { return "Hello World!"; } }
</script>
<form id="form1" runat="server">
<%= SomeProperty %>
<div>
<asp:Label ID="Label1" runat="server" Text="<%= SomeProperty %>"></asp:Label>
</div>
</form>
これが解析され、次のC#コードが作成されます(少し簡略化しました)。
private Label @__BuildControlLabel1()
{
Label @__ctrl = new Label();
this.Label1 = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "Label1";
@__ctrl.Text = "<%= SomeProperty %>";
return @__ctrl;
}
private void @__Renderform1(HtmlTextWriter @__w, Control parameterContainer)
{
@__w.Write( SomeProperty );
@__w.Write("\r\n <div>\r\n ");
parameterContainer.Controls[0].RenderControl(@__w);
@__w.Write("\r\n </div>\r\n ");
}
<%#...%>
構文の内部で何が起こるかの例を次に示します。
<script runat="server">
public string SomeProperty { get { return "Hello World!"; } }
protected void Page_Load(object sender, EventArgs e) { Label1.DataBind(); }
</script>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="<%# SomeProperty %>"></asp:Label>
</div>
</form>
このコードを生成します:
private Label @__BuildControlLabel1()
{
Label @__ctrl = new Label();
this.Label1 = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
@__ctrl.ID = "Label1";
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBindingLabel1);
return @__ctrl;
}
public void @__DataBindingLabel1(object sender, EventArgs e)
{
Label dataBindingExpressionBuilderTarget = ((Label)(sender));
Page Container = ((Page)(dataBindingExpressionBuilderTarget.BindingContainer));
dataBindingExpressionBuilderTarget.Text = System.Convert.ToString( SomeProperty , System.Globalization.CultureInfo.CurrentCulture);
}
ご覧の<%=...%>
とおり、サーバーコントロールのプロパティの外部で構文を使用して、戻り値を直接レンダリングできます。一方、<%#...%>
構文は、ラベルのDataBindingイベントのイベントハンドラーを生成します。このイベントは、ラベルのプロパティの値をSomePropertyの値に設定します。DataBindingイベントは、DataBindメソッドが呼び出されるたびに発生します。そのため、その呼び出しをPage_Loadイベントに追加しました。
うまくいけば、これはあなたがそれらの違いを理解するのに役立つでしょう。