2012-07-26 52 views
5

私のASP.NET MVC 4アプリケーションでは、Fluent Validationで控えめなクライアント検証を使用しようとしています。ASP.NET MVC控えめなクライアントの検証が機能しない

<script src="/Scripts/jquery.validate.min.js" type="text/javascript"> 
</script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"> 
</script> 

新しいASP.NET MVC 4アプリケーションの作成時にVS2010が提供する2つの.jsファイルがあります。また、web.configファイルでクライアント側の検証を有効にしました。クライアント検証と控えめなJavaScriptは有効になっている場合

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

は、私の知る限りでは、クライアント検証規則を持つ入力フィールドは控えめなクライアント検証をトリガーするデータ-VAL =「true」属性が含まれています。私は入力フィールドにこれらのフィールドを持っています。例えば

、しかし

<input class="input-validation-error" data-val="true" data-val- 
required="error text here" id="purchasePrice" 
name="PurchasePrice" type="text" value=""> 

<span class="field-validation-error error" data-valmsg-for="PurchasePrice" 
data-valmsg-replace="true">'Purchase Price' must not be empty.</span> 

、私は自分のフォームを送信するとき、コントローラに掲載されており、私のモデルではなく、クライアント側の私のコントローラのコードで確認されています。

EDIT:

これは私のフォームの開始タグです。

@using (Html.BeginForm("Create", "Product", FormMethod.Post, 
    new { enctype = "multipart/form-data", @class = "mainForm", 
     @id = "productCreateForm" })) 

ありがとう。

+2

愚かな質問をしますが、メインのjQueryのjsファイルとあなたが示されてきた2が正しく解決されていることを確認してきましたか? –

+0

メインのjQueryファイルが間違いなく解決されました。jquery関数が正しく動作しています。そのうち2人が正直に解決したのかどうかはわかりません。これらのファイルは存在し、クローム開発ツールのスクリプト部分で利用できるように見えます。 –

+0

別の愚かな質問ですが、検証するモデルから入力を生成しましたか? –

答えて

3

MVCの設定を追加しましたか?あなたはまた、各ビューモデル/バリデータを設定する必要が

protected void Application_Start() { 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 

    // this line is required for fluent validation 
    FluentValidationModelValidatorProvider.Configure(); 
} 

[Validator(typeof(PersonValidator))] 
public class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public int Age { get; set; } 
} 

public class PersonValidator : AbstractValidator<Person> { 
    public PersonValidator() { 
     RuleFor(x => x.Id).NotNull(); 
     RuleFor(x => x.Name).Length(0, 10); 
     RuleFor(x => x.Email).EmailAddress(); 
     RuleFor(x => x.Age).InclusiveBetween(18, 60); 
    } 
} 

この問題が解決しない場合は、正しく動作していないバリデータの例を投稿できますか?すべての検証がクライアント側で実行できるわけではありません。たとえば、以下のバリデータはサーバー側のみ動作します:

// when validator rules are always server side 
public class ServerSideValidator : AbstractValidator<Person> { 
    public ServerSideValidator() { 
     When(x => x.Name == "Foo",() => { 
      RuleFor(x => x.Email).EmailAddress(); 
     }); 
    } 
} 
+0

ですが、私はそれらすべてを持っています。これは私の検証コードです:RuleFor(product => product.Manufacturer).NotNull(); –

+0

メーカーとは?それは文字列かクラスですか? – Dismissile

+0

ただの文字列です。 –

関連する問題