1

サーバーで検証する必要がある ZipCode フィールドを含むページがあります。ページが読み込まれるとき、ZipCode は外部ソースから事前に入力されている必要があります。

このフィールドを検証するために、jquery リモート バリデーターを追加しました: $(document).ready(function () {

    $("#Buyer_ZipCode").rules("add", {
        remote: { url: zipcodeValidationUrl, async: false },
        messages:
           {
               remote: "Cannot determine location for given zip code."
           }
    });

    var zipcode = $("#Buyer_ZipCode");
    if (zipcode.val().length > 0) {
        zipcode.trigger('blur');
    };

});

ページの読み込み後に一度にアクションを実行するために、ぼかしトリガーを追加しました。私のぼかしハンドラ:

$("#Buyer_ZipCode").bind('blur', function (e) {       

    //some actions

    element = $(e.target);        
    if (!element.valid()) {
        console.log(element.val());
        // Invalidate lookup target control.
        targetCity.get(0).value = "";
        targetState.get(0).value = "";
        return;
    };

 // yet some actions

});

ページがロードされ、ZipCode フィールドの値が既にある場合を除いて、すべてが正常に機能します。この場合、valid() メソッドは常に false を返しますが、リモート検証は非同期ではなく、サーバーは実際には true を返します。ちなみに、これは私の検証コントローラーです

 public JsonResult IsZipCodeValid([NestedFieldModelBinder]string Buyer_ZipCode)
    {
        if (Utils.GetZipcode(Buyer_ZipCode) != null)
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }

        return Json("Cannot determine location for given zip code.", JsonRequestBehavior.AllowGet);
    }

私は何を間違っていますか?

4

1 に答える 1

1

RemoteAttributeを使用する方がはるかに簡単でクリーンであることがわかります。

ビューモデルで、Remote[] 属性を Buyer_ZipCode プロパティに追加します

[Remote("ValidateZipCode", HttpMethod="Post", ErrorMessage = "Cannot determine location for given zip code.")]
public string Buyer_ZipCode{ get; set; }

そして、検証のためのあなたの行動:

[HttpPost]
public ActionResult ValidateZipCode(string Buyer_ZipCode)
{
    // do your validation
    return Json(true);
}

よろしく

于 2012-06-16T16:40:22.127 に答える