MVC 3: HtmlHelpers を使用して条件付きで Disabled 属性を追加する 質問する

MVC 3: HtmlHelpers を使用して条件付きで Disabled 属性を追加する 質問する

ASP.Net MVC 3 Web アプリケーションがあり、次のように HtmlHelper クラスを使用してビュー ページにチェック ボックスを追加しています...

@Html.CheckBox("CheckBox1", true, new { @class = "Class1" })

私がやりたいのは、ビュー ステート プロパティに基づいて、無効な属性を条件付きで追加することです。基本的には、次のようになります...

@Html.CheckBox("CheckBox1", true, new { @class = "Class1", @disabled = Model.ReadOnly })

残念ながら、disabled属性の性質上、これは機能しません。どれでも無効属性に割り当てられた値 (「false」であっても) は true として変換されます。

この問題を回避するための解決策はすでにいくつか考え出しているので、質問は「どうすればこれができるのか」ではありません。むしろ、上記の望ましい方法のような簡単な方法があるのでしょうか? それとも、次のいずれかに頼らなければならないのでしょうか?

私ができることは...

  1. if/else ステートメントを作成し、別のHtml.CheckBox行に書き込みます (読みやすさは良くありません。マークアップ警告が表示される可能性がありますが、よくわかりません)

  2. HtmlHelper クラスをスキップし、タグを手動で記述して、条件付き属性を改善します (コードは短くなりますが、一貫性がなくなります)

  3. 「無効」パラメータを受け取るカスタム ヘルパーを作成します (最もクリーンなソリューションですが、不要な追加メソッドが必要になります - ただし、これまでのところおそらく最善のオプションです)

ベストアンサー1

ビュー/ヘルパーのどこかにこれを定義してください

@functions {
 object getHtmlAttributes (bool ReadOnly, string CssClass) 
 {
     if (ReadOnly) {
         return new { @class = CssClass, @readonly = "readonly" };
     }
     return new { @class = CssClass };
 }
}

次に以下を使用します:

@Html.TextBox("name", "value", @getHtmlAttributes(Model.ReadOnly, "test"))

おすすめ記事