27

私の ASP .NET Web フォームには、次の宣言型コードがあります。

<asp:TextBox runat="server" ID="txtbox" CssClass='<%=TEXTBOX_CSS_CLASS%>' />

定数 TEXTBOX_CSS_CLASS は、ページの分離コード クラスが継承する基本クラスで定義されます。

public class MyPageBase : Page
{
    protected internal const string TEXTBOX_CSS_CLASS = "myClass";
}

ただし、編集時のコンパイラは、「これはスクリプトレットではありません[sic]。プレーンテキストとして出力されます」と警告します。その言葉どおり、css クラスは文字通り「<%=TEXTBOX_CSS_CLASS%>」としてレンダリングされます。

このエラー メッセージは何を意味し、基底クラスで引き続き定数を使用できるようにするための回避策はありますか?

4

3 に答える 3

32

<%= ... %>を使用してサーバー側コントロールのプロパティを設定することはできません。インライン式<% %>は、aspx ページまたはユーザー コントロールの最上位ドキュメント レベルでのみ使用できますが、サーバー コントロールのタグ属性 ( など <asp:Button... Text =<% %> ..>) に埋め込むことはできません。

TextBox が GridView、ListView などの DataBound コントロール内にある場合は、次の<%# %>構文を使用できます。DataBind()または、コード ビハインドまたはインライン サーバー スクリプトからコントロールで明示的に呼び出すことができます。

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' />

// コード ビハインド ファイル

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

ASP.NET には、ファイルからカスタム アプリケーション設定と接続文字列情報を抽出できる組み込みの式ビルダーがいくつか含まれていweb.configます。例:

  • 資力
  • 接続文字列
  • アプリ設定

そのため、ファイルの一部classNameから名前が付けられたアプリケーション設定を取得する場合は、次の式を使用できます。<appSettings>web.config

<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" /> 

ただし、上記のスニペットは、Appsettings からクラス名を読み取るための標準ではありません。

ExpressionBuilders独自のカスタムまたはコード ビハインドを次のように構築して使用できます。

txtbox.CssClass = TEXTBOX_CSS_CLASS;

カスタム式ビルダーの構築に関するこのリンクを確認してください。カスタム式を作成したら、次のような値を表示できます。

<asp:TextBox Text="<%$ SetValue:SomeParamName %>"
    ID="setting" 
    runat="server" />
于 2013-09-23T07:08:58.550 に答える
16

runat=server問題は、コントロールと<%= .. %>コード ブロックを混在させることができないことです。正しい方法は、分離コードを使用することです: txtbox.CssClass = TEXTBOX_CSS_CLASS;.

于 2013-09-23T06:57:46.007 に答える