所以为了更好的客户体验,以及项目的合理性,我们在服务器端封装一个实体类(具体见AppCode/AjaxClass),代码如下:
view sourceprint?1 [Serializable] public class AjaxClass { public string Msg { get; set; } public int Result { get; set; } }
就是一个最简单的实体类,有2个属性,Msg和Result,Msg用于存放验证失败的信息,Result用于存放结果。
看下WebSerivce的代码如何修改:
view sourceprint?01 [WebMethod] public AjaxClass CheckUid(string uid) { //return uid == "testuid" ? true : false; AjaxClass ajaxClass = new AjaxClass(); try { if (uid == "testuid") { ajaxClass.Msg = "用户名已存在,请重新输入!"; ajaxClass.Result = 0; } if (uid.IndexOf("test") == -1) { ajaxClass.Msg = "用户名格式不正确,用户名必须包含test,请重新输入!"; ajaxClass.Result = 0; } else { ajaxClass.Msg = "格式正确!"; ajaxClass.Result = 1; } } catch { ajaxClass.Msg = "程序出现异常,请联系管理员!"; ajaxClass.Result = 0; } return ajaxClass; }
上面的WebService就完整的实现了我先前说的3种错误情况(由于这边仅仅是例子所以就只有表示层,实际开发中需要分层开发,此代码应该放入业务逻辑层)
注意:在webservice返回值前,如果检查成功必须要为ajaxClass.Result = 1,否则客户端验证会无法通过。
虽然完成了服务器端的代码修改,但是直接运行页面还是会出错,这是因为我上面所说过的,jQuery.Validate的remote远程的输出只能是true或者false,我们来看下具体的代码,其中注释掉的就是原来官方的代码:
view sourceprint?01 success: function(response) { if (response.Result) {//if(response){ var submitted = validator.formSubmitted; validator.prepareElement(element); validator.formSubmitted = submitted; validator.successList.push(element); validator.showErrors(); } else { var errors = {}; //errors[element.name] = response.Result || validator.defaultMessage(element, "remote"); errors[element.name] = response.Msg; validator.showErrors(errors); } previous.message = response.Msg; //previous.valid = response; previous.valid = response.Result; validator.stopRequest(element, response.Result); }
出处:博客园
责任编辑:bluehearts
上一页 使用jQuery.Validate进行客户端验证(后篇) 下 [2] 下一页 使用jQuery.Validate进行客户端验证(后篇) 下 [4]
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|