QA@IT

C# 検証属性の拡張について

9297 PV

初めて質問させていただきます。
現在、asp.net mvc ver5.1 で新規Webアプリを開発しておりまして、表題の件で困っているところです。
具体的には標準の検証属性「MaxLength」に下記の引数を渡すことによってエラーメッセージを出力させたいと考えています。
第一引数:エラーメッセージのIDを文字列型で(リソースファイル.resxから取得)
第二引数:最大文字数を数値型で

どのように実装すれば、実現できるのでしょうか?
できましたら実装例をお示しいただけると、大変ありがたいです。
有識者の方々、どうかお力を貸してください。
お手数ですが、よろしくお願いいたします。

回答

MaxLength でエラーメッセージと最大値を設定する方法は最初からありますね。
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.dataannotations.maxlengthattribute.aspx

メッセージの表示にリソースを使う方法はこちらに
http://haacked.com/archive/2009/12/07/localizing-aspnetmvc-validation.aspx/

あとはソースコードがみれるはずだと思うので、それを参考に自分で実装するとかかなぁ。

編集 履歴 (0)
  • MaxLength はクライアント側での検証が動かないようですが? -

具体的には標準の検証属性「MaxLength」に下記の引数を渡すことによって
エラーメッセージを出力させたいと考えています。

その「MaxLength」というのは html の input type="text" 要素の maxlength 属性のことだと思いますが、ASP.NET Web アプリでは通常そのようなものは使わず、標準で用意された検証機能を使います。

ASP.NET MVC Web アプリケーションでユーザー入力の検証を行う場合、MVC2 以降ではデータアノテーション検証を標準で使用することができます。

記事としてはちょっと古いのですが、Microsoft が提供する以下のチュートリアルがまとまっていて理解しやすいと思います。

[C#] #21. データ アノテーション検証コントロールでの検証
http://technet.microsoft.com/ja-jp/subscriptions/ff642519.aspx

maxlength 属性は使わないほうがいいと思います。以下のような問題もありますので。

maxlengthを使ってはいけない。特にパスワード入力欄で使っちゃ駄目!
http://qiita.com/kawaz/items/d462a05c113b8e063736

【追伸】
ちょっと勘違いしていたかも。「MaxLength」というのは System.ComponentModel.DataAnnotations 名前空間の MaxLengthAttribute のことですか?

であれば、それは検証用ではないです。検証用には StringLengthAttribute を利用します。詳しくは下記ページ参照。

String MinLength and MaxLength validation don't work (asp.net mvc)
http://stackoverflow.com/questions/18276853/string-minlength-and-maxlength-validation-dont-work-asp-net-mvc

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。