JQuery远程验证器总是返回false

时间:2012-06-16 16:17:52

标签: jquery asp.net-mvc-3 validation jquery-validate

我有一个包含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);
    }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您会发现使用RemoteAttribute更加简单和清晰。

在viewmodel中,将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);
}

此致