web-dev-qa-db-ja.com

ASP.NET MVC 3の控えめな検証を自分のスタイルに合わせてカスタマイズするにはどうすればよいですか?

MVC 3のデフォルトの検証は、 jQuery Validation に基づいています。これは通常、次のようにカスタマイズできます。

$.validator.setDefaults({
  submitHandler: function() { alert('submitHandler'); },
  errorPlacement: function(error, element) {
    // do something important here
    alert('errorPlacement');
  },
  errorClass: "error",
  errorElement: "input",
  onkeyup: false,
  onclick: false
})

しかし、それはMVC 3では機能しないようです。具体的には、errorPlacementが呼び出されたことがないようで、理由がわかりません。 submitHandlerが呼び出されますが、errorPlacementは呼び出されません。

サイトのスタイルに必要な構造/スタイルに一致するように検証をカスタマイズするにはどうすればよいですか?デフォルトは素晴らしいですが、すべての状況で常に機能するとは限りません。

32
Kori

私のコードでは、_$.validator.setDefaults_を使用する代わりに、$("#form_selector").data('validator')を使用してフォームバリデーターにアクセスし、設定を変更します。

_$(function () {

    var validator = $("#form_selector").data('validator');
    validator.settings.errorPlacement = function(error,element) {
        alert('errorPlacement');
    };

});
_

それがあなたのために働くかどうか見てください。

46
Felipe Leusin

私は同じ問題を抱えていましたが、Unobtrusiveプラグインが実際にcasuingの問題であり、設定したオプションを上書きすることに気付きました!秘訣は、コードを次の順序で記述/含めることです。

  1. 検証プラグイン
  2. カスタムコードとオプション
  3. 目立たないプラグイン

他の順序でこれは正しく設定されません!

39
CBarr

これを行う正しい方法:

スクリプトの順序:

  1. 検証プラグイン
  2. 目立たないプラグイン
  3. カスタムコードとオプション

カスタムコードとオプションスクリプト:

var settings = {
   //...
}; 

// override jQuery unobtrusive validator settings
$.validator.unobtrusive.options = settings;
6
Anton Khotoolev