どのように私はASP.NETサーバーコントロールは、プロパティの値として埋め込まれたコードブロックを取る作るのですか?
-
23-08-2019 - |
質問
私はタイトルのプロパティでカスタムサーバーコントロールを持っています。コントロールを使用している場合、私はそうのようなaspxページにタイトルの値を設定したいと思います:
<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>
私はこれを行うと、、しかし、私は正確な文字列を取得しています。<%= PagePropertyValue%>私が見たいというプロパティ値ではなく、表示されます。
だから、データバインディング式を(以下示唆したように)しようとしました。私は悪いに見えたが、私はどちらか何かを得ることはありません文字列リテラルを得ることはありません。
<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>
私は価値のこの種を取るために私のカスタムコントロールを行うために何が必要ですか?それとも私がページに行うために必要なものがあります。
解決
あなたはカント。 <%=%>サーバーコントロールが構築された後に起こる応答ストリームに直接文字列を書き込みます。 />説明のために。
だから、その分離コードのいずれか、または<%#+ザカリーとしてデータバインディングが示唆ます。
他のヒント
は、自分の質問へのフォローアップとして、私は私が本当に欲しかった私がローカライズされたコンテンツに入れやりたいことから、<%$構文を使用してASP.NETの式を使用していたことを発見した。
このサーバーコントロール側で明らかに余分な取り扱いを行うことができます。
<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>
このだけで正常に動作します。
データバインディング構文を使用してみてください:
<%# PagePropertyValue %>
提案としてバインドプロパティの値が正しく機能するためには、あなたがASPXまたはASCXファイルでこれを持っています。
<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>
あなたは、実際にあなたのページにデータをバインドする必要がありますあなたは、ファイルの後ろにあなたのコードでこれを追加する必要がありWICH(C#でコード)
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
こうすることで、それはあなたのascxファイルまたはASPXファイルにデータをバインドします。
この属性を制御するために特異的であることに注意してください。ページ内のどこか他の構文を意味する<%=構文外の制御属性を使用する場合は期待通りに動作します。したがって、この <%= GetCapitalUserName()%> 正しいメソッドを呼び出すと、ページ内の呼び出しの結果を注入します。