我有一个包含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);
}
我做错了什么?
答案 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);
}
此致