2012-03-30 20 views
1

The value 'abc' is not valid for fieldName.がエラーメッセージとして表示されています。これはデフォルトのエラーメッセージです。私は簡単な方法でそれを上書きしたいと思います。今私が試したもののよう

intデータ型の検証asp .net mvc3

  • [RegularExpression("([1-9][0-9]*)")]
  • Range(1,int.max,ErrorMessage="enter numeric value")

  • [Integer(ErrorMessageResourceType = typeof(appName.Resources.abc.Resource), ErrorMessageResourceName = "error_numeric")]
  • [RegularExpression(@"^\d+$",ErrorMessage="enter numeric value")]
  • の下にリストされているが、デフォルトのエラーメッセージを変更するには失敗しました。
    これを行う最も簡単な方法をお勧めします。

    using System; 
        using System.Collections.Generic; 
        using System.Linq; 
        using System.Web; 
        using System.ComponentModel.DataAnnotations; 
        using System.Web.Mvc; 
    
        namespace blueddPES.ViewModels 
        { 
        public class ContactViewModel 
         { 
         [Integer(ErrorMessage="sdfdsf")] 
         public int? hp { get; set; } 
         } 
    
+1

この検証シナリオをカバーするデータ注釈は検索しないでください。私はあなたの前の質問で既に答えたので、整数などの値型でそれを達成することはできません:http://stackoverflow.com/questions/9921067/server-side-validation-of-int-datatypec- asp-net-mvc3。カスタムモデルバインダーが必要なのは、要求値を整数に解析する既定のモデルバインダーであり、失敗した場合、System.Web.Mvcアセンブリのリソースとしてハードコードされた既定のエラーメッセージが追加されるためです。 –

+0

しかし@DarinDimitrov私はこの小さなもののカスタムコードの多くを追加したくないです。カスタムmodelbinderを追加する代わりに、intの代わりに文字列をデータ型として受け取る別のオプションがあります。 – RollerCosta

+0

はい、実際にそのオプションがあります。 –

答えて

11

最も簡単な方法は、Data Annotations Extensionsを使用することです。これは、整数のようなもののためにいくつかの有用な属性を持っているなど

それとも中のように、あなた自身を書くことができ:How to change 'data-val-number' message validation in MVC while it generate by helper

編集:コメントの後に追加されました完全なサンプル。

私はサンプルバニラMVC 3プロジェクトを作成し、以下のことをやった:

  1. 追加NuGetパッケージDataAnnotationsExtensions.MVC3

  2. はModelクラスを追加しました:

    public class IntegerSample 
    { 
        [Required(ErrorMessage="Dude, please fill something in!")] 
        [Integer(ErrorMessage="Are you stupid? Just fill in numbers only!")] 
        public int? TestValue { get; set; } 
    } 
    
  3. ホームを追加しましたコントローラ:

    public class HomeController : Controller 
    { 
        // 
        // GET: /Home/ 
        public ActionResult Index() 
        { 
         return View(); 
        } 
    } 
    
  4. 追加ホームビュー:

    @using (Html.BeginForm()) { 
        @Html.ValidationSummary(true) 
        <fieldset> 
         <legend>IntegerSample</legend> 
         <div class="editor-label"> 
          @Html.LabelFor(model => model.TestValue) 
         </div> 
         <div class="editor-field"> 
          @Html.EditorFor(model => model.TestValue) 
          @Html.ValidationMessageFor(model => model.TestValue) 
         </div> 
         <p> 
          <input type="submit" value="Save" /> 
         </p> 
        </fieldset> 
    } 
    

私はあなたがこのサンプルコードを使用していくつかのより多くの洞察を得ることを願っています。このサンプルを実行すると、期待通りに動作します。

+0

私も[整数]を試しましたが、それは私のために働いています – RollerCosta

+0

DataAnnotationsパッケージの最初にナゲットパッケージをインストールしましたか?参照してください:http://nuget.org/packages/DataAnnotationsExtensions.MVC3 –

+0

はい私はまたその – RollerCosta

0

ローカライゼーションを行うことができるPhil Haack MetadataProviderの拡張バージョンを使用します。

は、このブログ記事を見に行ってください。http://haacked.com/archive/2011/07/14/model-metadata-and-validation-localization-using-conventions.aspx

要約:

  • それは、例えば、クラス型+プロパティを使用してリソースキーを決定しますPerson_FirstName
  • 検証プロパティの後にエラーメッセージを表示します。 Person_FirstName_Required
  • リソースファイルにこれらのエントリを入力するだけです。
+0

あなたが提供しているリンクは適切ですか? – RollerCosta

+0

データアノテーションが使用する既定のメッセージを変更する場合は、リソースファイル(その都度、ローカライズされた文字列のベストプラクティスです)に入れてください。 –

+0

現在、私はそれからすべてを得るためにリソースファイルを使用しています。私はすべての表示名、エラーメッセージ(ビューに表示されてeveryhting)を意味し、私もそれを取得していると言って、しかし、問題は、intデータ型のエラーメッセージです。 – RollerCosta

2

あなたはshown hereとしてカスタムモデルバインダーを実装したり、代わりに整数の文字列データ型を使用して、正規表現のデータアノテーションを適用することができます。もちろん、文字列データ型を使用する場合は、ビューモデルをドメインモデルにマッピングするときに、この文字列を基になるデータ型に手動で解析する必要があります。

+0

は文字列部分とその正常に動作します。しかし、私はまだ(ModelBinderを除いて)より良いアプローチが必要です。 u gtの場合は、私に教えてください。 – RollerCosta

+0

いいえ、別のアプローチはありません。個人的に私はこのシナリオを処理するためにカスタムモデルバインダーを使用します。 –

関連する問題