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 回答