[解決済み] Html.TextBoxForに条件に応じてdisable属性を設定する
2023-06-14 06:01:06
質問
asp.net MVCのHtml.TextBoxForで、以下のように条件に基づいてdisable属性を設定したいのですが、どうすればよいでしょうか?
@Html.TextBoxFor(model => model.ExpireDate, new { style = "width: 70px;", maxlength = "10", id = "expire-date" disabled = (Model.ExpireDate == null ? "disable" : "") })
このヘルパーは disabled="disabled " と disabled="" の2つの出力を持っています。
Model.ExpireDate == nullの場合、テキストボックスを無効にしたい。
どのように解決するのですか?
有効な方法は
disabled="disabled"
また、ブラウザは
を受け入れる
disabled=""
といった具合ですが、私は最初の方法をお勧めします。
ということで、カスタムヘルパーを作成して 無効化 の機能を再利用可能なコードの断片にカプセル化するために、カスタム HTML ヘルパーを書くことをお勧めします。
using System;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
public static class HtmlExtensions
{
public static IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes,
bool disabled
)
{
var attributes = new RouteValueDictionary(htmlAttributes);
if (disabled)
{
attributes["disabled"] = "disabled";
}
return htmlHelper.TextBoxFor(expression, attributes);
}
}
というように使うことができます。
@Html.MyTextBoxFor(
model => model.ExpireDate,
new {
style = "width: 70px;",
maxlength = "10",
id = "expire-date"
},
Model.ExpireDate == null
)
そして、さらに インテリジェンス をこのヘルパーに導入することができます。
public static class HtmlExtensions
{
public static IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes
)
{
var attributes = new RouteValueDictionary(htmlAttributes);
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (metaData.Model == null)
{
attributes["disabled"] = "disabled";
}
return htmlHelper.TextBoxFor(expression, attributes);
}
}
というように、これで無効化条件を指定する必要がなくなりました。
@Html.MyTextBoxFor(
model => model.ExpireDate,
new {
style = "width: 70px;",
maxlength = "10",
id = "expire-date"
}
)
関連
-
[解決済み] Razor View Engine : 式ツリーには、動的な操作を含めることができません。
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み] web.configでmaxJsonLengthの長さを無制限に設定することは可能ですか?
-
[解決済み】Html.TextBoxForでデフォルト値を設定する方法は?
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み】ASP.NET MVC 3 - 部分テンプレートと表示テンプレートと編集テンプレート
-
[解決済み] [Solved] ASP.NET MVCコントローラメソッドからJSON.NETでシリアライズされたcamelCase JSONを返すにはどうすればよいですか?
-
[解決済み] HTMLヘルパーでURLを生成する
-
[解決済み] NerdDinnerでASP.NET MVCでModelState.IsValidは何のために有効なのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MVC 3 - 辞書に渡されたモデル項目の型は 'System.Collections.Generic.List`1 です。
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み】Html5 data-* with asp.net mvc TextboxFor html attributes
-
[解決済み】cshtmlテンプレートで関数を作成する方法は?
-
[解決済み】Html.ActionLinkを使用して別のコントローラのアクションを呼び出す
-
[解決済み] asp.net mvc: なぜ Html.CheckBox は追加の隠された入力を生成するのですか?
-
[解決済み] ASP.Net MVC デフォルトの HTTP ヘッダーを削除する方法は?
-
[解決済み] MVCのHTMLヘルパーで生成されたHTML要素にclass属性を追加するにはどうすればよいですか?
-
[解決済み] Entity Frameworkのデータベースを再作成する方法は?