16

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

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

HTML と jQuery Validate の橋渡し: アダプター

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

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

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

しかし、この投稿MVC3: Make Checkbox Required via jQuery validate? を見ると、検証が機能するために必要なのは、次のコード行を追加することにより、2 番目のステップ (「アダプターの作成」) だけです。

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

新しい MVC 4 Internet App でコードをテストしたところ、問題なく動作しました。これが非常に単純なサンプルです。

モデルを見る

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 に関する優れたドキュメントはどこにありますか?

4

1 に答える 1

3

コメントでリンクされている記事 @BlueCippy に加えて、この記事で 2. に対する答えを見つけました。

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

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

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

于 2013-01-25T13:29:26.177 に答える