[解決済み] Asp.Net MVCのDataAnnotations StringLengthからテキストボックスのmaxlength属性を取得する。
2023-07-10 13:52:03
質問
MVC2アプリケーションで、テキスト入力のmaxlength属性を設定したいと思っています。
既にデータアノテーションを使用してモデルオブジェクトにstringlength属性を定義しており、入力された文字列の長さを正しく検証しています。
モデルがすでに情報を持っているときに、最大長属性を手動で設定することによって、ビューで同じ設定を繰り返したくありません。 これを行う方法はありますか?
以下にコードスニペットを示します。
モデルから
[Required, StringLength(50)]
public string Address1 { get; set; }
ビューから
<%= Html.LabelFor(model => model.Address1) %>
<%= Html.TextBoxFor(model => model.Address1, new { @class = "text long" })%>
<%= Html.ValidationMessageFor(model => model.Address1) %>
避けたいのは
<%= Html.TextBoxFor(model => model.Address1, new { @class = "text long", maxlength="50" })%>
このような出力を得たい。
<input type="text" name="Address1" maxlength="50" class="text long"/>
何か方法はないでしょうか?
どのように解決するのですか?
リフレクションに頼らずにこれを実現する方法を私は知りません。ヘルパーメソッドを書けばよいでしょう。
public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes
)
{
var member = expression.Body as MemberExpression;
var stringLength = member.Member
.GetCustomAttributes(typeof(StringLengthAttribute), false)
.FirstOrDefault() as StringLengthAttribute;
var attributes = (IDictionary<string, object>)new RouteValueDictionary(htmlAttributes);
if (stringLength != null)
{
attributes.Add("maxlength", stringLength.MaximumLength);
}
return htmlHelper.TextBoxFor(expression, attributes);
}
というように使うことができます。
<%= Html.CustomTextBoxFor(model => model.Address1, new { @class = "text long" })%>
関連
-
[解決済み] Kendo UI MVC用パスワードテキストボックス
-
[解決済み] Visual Studioのデバッグ/ロードが非常に遅い
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] MVCで、文字列の結果を返すにはどうしたらいいですか?
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み】ASP.NET MVC 3 コントローラから200 HTTPステータスコードを返す方法
-
[解決済み】jQuery Ajaxの呼び出しとHtml.AntiForgeryToken()について)
-
[解決済み】リポジトリとサービスレイヤーの違い?
-
[解決済み] セキュリティ透過的なメソッド 'WebMatrix.WebData.PreApplicationStartCode.Start()' による試行。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DI向けNinjectとUnityの比較【終了しました
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み】Reflection - プロパティで属性名と値を取得する
-
[解決済み】認証や認可に失敗した場合、AuthorizeAttributeがログインページにリダイレクトされるのはなぜですか?
-
[解決済み] [Solved] Replace line break characters with <br /> in ASP.NET MVC Razor view
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み] [Solved] ASP.NET MVCコントローラメソッドからJSON.NETでシリアライズされたcamelCase JSONを返すにはどうすればよいですか?
-
[解決済み] ASP.NET MVCコントローラから外部URIへのリダイレクト
-
[解決済み] ASP.Net MVCでRequest on Controllerをモック化する方法とは?
-
[解決済み] ASP.NET MVCにおけるセッション変数