web-dev-qa-db-ja.com

$ .validator.unobtrusive.adapters.addBool()メソッドを理解する

私は何かを理解しようとしています。

このブログ投稿から http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

HTMLとjQueryのブリッジング検証:アダプター

クライアント側のバリデーターの作成には、jQuery Validateのバリデーターの作成と、HTML属性からパラメーター値を取得してjQuery Validateメタデータに変換するアダプターの作成の2つのステップが含まれます。前者のトピックは、このブログ投稿の範囲には含まれていません(MVC固有ではないため)。

JQuery.validator.unobtrusive.adaptersで利用可能なアダプターコレクションがあります。アダプターコレクションにぶら下がっているのは、アダプター登録方法(add)と、非常に一般的なタイプのアダプター(addBool、addSingleVal、およびaddMinMax)を登録するために使用できる3つのヘルパーです。

twoステップと表示されていることに注意してください。

しかし、この投稿を見ると MVC3:jQueryを介してチェックボックスを作成する必要がありますか? 検証が機能するために必要なのは2番目のステップ(「アダプターの作成」)だけです-このコード行を追加することによって:

$.validator.unobtrusive.adapters.addBool("mandatory", "required");

新しいMVC4インターネットアプリでコードをテストしましたが、正常に動作します。これが非常に単純なサンプルです。

モデルを見る

public class SimpleViewModel
{
    [Mandatory(ErrorMessage = "You must agree to the Terms to register.")]
    [Display(Name = "Terms Accepted")]
    public bool IsTermsAccepted { get; set; }
}

検証属性

public class MandatoryAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        return (!(value is bool) || (bool)value);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        ModelClientValidationRule rule = new ModelClientValidationRule();
        rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
        rule.ValidationType = "mandatory";
        yield return rule;
    }
}

見る

@model MvcApplication2.Models.SimpleViewModel

@{
    ViewBag.Title = "";
}    

@using (Html.BeginForm()) {
    @Html.ValidationSummary()
    @Html.CheckBoxFor(model => model.IsTermsAccepted)
    @Html.ValidationMessageFor(model => model.IsTermsAccepted)
    <input type="submit" value="Send" />
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
        $.validator.unobtrusive.adapters.addBool("mandatory", "required");
    </script>
}

つまり、基本的に3つの質問があります。

  1. $ .validator.unobtrusive.adapters.addBool( "mandatory"、 "required");です。属性クラスを書く以外に本当に必要なのは?

  2. それは舞台裏で正確に何をしますか?

  3. addBoolに関する優れたドキュメントはどこにありますか?

15
PussInBoots

コメントでリンクされている@BlueChippyの記事の他に、2。の答えが この記事 に見つかりました。

  1. はい、属性以外に必要なのはそれだけです。これは、すでに存在するルール(required)を使用しているためです。
  2. それは何をするためのものか?

これは、MandatoryAttributeの新しい検証アダプターを登録するだけです。最初のパラメーターはアダプター名で、2番目のパラメーターはjQuery検証ルールの名前です。アダプター名は、検証タイプとして以前に指定した値と一致する必要があり、jQuery検証が必要です-ルールでは、ユーザーがチェックボックスをオンにする必要があります。

3。詳細については、 Brad Wilsonのブログのこの記事 を参照してください。

3
marapet