7

タイトルのプロパティを持つカスタム サーバー コントロールがあります。コントロールを使用する場合、aspx ページでタイトルの値を次のように設定したいと思います。

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>

ただし、これを行うと、表示したいプロパティ値ではなく、正確な文字列 <%= PagePropertyValue%> が表示されます。

そのため、データバインディング式を試した後 (以下で提案)。見栄えの悪い文字列リテラルは取得しませんが、他にも何も取得しません。

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>

この種の値を取得するには、カスタム コントロールに何をする必要がありますか? または、ページに対して何かする必要がありますか。

4

5 に答える 5

7

できません。<%= %> は、文字列を応答ストリームに直接書き込みます。これは、サーバー コントロールが構築された後に発生します。説明については、この投稿を参照してください。

したがって、ザカリーが示唆するように、コードビハインドまたは <%# + データバインディングのいずれかです。

于 2008-12-22T20:09:43.733 に答える
2

私自身の質問のフォローアップとして、私が本当に望んでいたのは <%$ 構文を使用して ASP.NET 式を使用することであることがわかりました。

これは、明らかにサーバー コントロール側で余分な処理を行うことなく実行できます。

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>

これはうまくいきます。

于 2008-12-29T21:13:22.723 に答える
1

データバインディング構文を使用してみてください: <%# PagePropertyValue %>

于 2008-12-22T20:00:15.530 に答える
1

バインド プロパティの値が推奨どおりに正しく機能するようにするには、aspx または ascx ファイルに次のように記述します。

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>

次に、ページ内のデータを実際にバインドする必要がありますが、これを分離コード ファイル (C# のコード) に追加する必要があります。

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

そうすれば、ascx または aspx ファイルのデータがバインドされます。

于 2008-12-22T20:56:50.563 に答える