原文:asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

        前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我曾经遇到的问题,因为和数据验证相关,所以就放在了这系列的文章中。
        经过前几篇文章的分享,大家应该觉得asp.net 自带的Remote远程数据注解比较好用,但是我在实际使用中却遇到了问题。
        首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制,这个可以通过StringLength特性来解决;同时还需要验证用户名不能重复,这个就需要通过Remote特性来解决。
        现在需要再添加一个验证,那就是用户名不能包含违禁词。比如......(比较敏感,就不写了。。。^_^),违禁词保存在数据库中。刚开始我觉得这个也简单,再加个Remote验证不就解决了么。。。童鞋们,有时候我们觉得很简单就能办到的事情,如果不做,永远不知道你能不能办到。所以建议大家,遇到事情不要拖拉,尽快做好。
        噼里啪啦,很快就把验证的方法写好了,然后加到Model中一看傻眼了。。。
        原来不支持同一个属性有两个Remote验证。。。
 
        这个时候该怎么办呢,尝试将两个验证写在同一个Remote中,但是这样的话只能显示一个ErrorMessage,被否决。(但是的我以为Remote特性的方法只能返回一个bool值,不能返回ErrorMessage)。
        然后我就在cnblogs、csdn以及百度知道发帖询问,大多数的回答没有说到重点。
 
        由于时间紧(也不是因为时间紧,总不能让这么一个小验证跟经理说搞个一整天吧),所以就自己写了个自定义验证解决。
        事情虽然是解决了,但是总觉得微软设计的时候总不会这么傻叉,连这点都没想到。但是查资料也没查到啥,之后就一直放着。
 
        直到昨天,csdn上的一哥们说Remote验证可以自定义ErrorMessage,我才恍然大悟,我原来一直以为只能返回true或false的。
        接下来就很简单了,花了5分钟的时间找到了返回ErrorMessage的方法,原来验证为false时不用返回bool值,可以直接返回ErrorMessage。方法如下:
        public JsonResult CheckUserName(string userName)
{
if (IsUniqueName(userName) && IsForbiddenName(userName))
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else if (!IsUniqueName(userName))
{
return Json("用户名不唯一!", JsonRequestBehavior.AllowGet);
}
else
{
return Json("用户名不包含违禁词!", JsonRequestBehavior.AllowGet);
}
}
        这样就可以完美解决需要多个Remote验证的问题了。
        虽然问题解决了,但是仍然要吐槽下微软,干嘛不能多个Remote验证,吧这么多的逻辑都放在一个方法中容易绕晕额。。。
 
        虽然这是个小问题,但是从中至少得到了两点启示:
            1、看到的问题不可怕,可怕的是有问题但是我们没有看到;
            2、很多事情,只要你坚持,总会等到柳暗花明的一天。
 
  asp.net mvc3 数据验证的前几篇文章:asp.net mvc3 的数据验证(一)
                    asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化
                    asp.net mvc3 数据验证(三)—自定义数据注解

asp.net mvc3 数据验证(四)—Remote验证的一个注意事项的更多相关文章

  1. asp.net mvc3 数据验证(三)—自定义数据注解

    原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要 ...

  2. asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化

    原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息         在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: ...

  3. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  4. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  5. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  6. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

  7. jQuery.Validate 验证,以及 remote验证, 多参数传递

    jQuery.Validate 验证: http://www.runoob.com/jquery/jquery-plugin-validate.html 教程网址,很简单, 今天主要在这里记录一下re ...

  8. Win7上的ASP.NET MVC3项目在Win10上运行的一个坑

    先解释一下问题:我原来的电脑环境是Win7+VS2015,因为新换了个电脑环境变成Win10+VS2015了,所以就把原先的项目复制到新的机器上,那么问题来了,原先的一个项目在VS2015上打开竟然直 ...

  9. asp.net mvc数据验证

    文章:asp.net mvc3 的数据验证(一) 文章:ASP.NET MVC下的四种验证编程方式 这个讲了在一个地方展示验证信息 文章:[ASP.NET MVC系列]浅谈数据注解和验证 这个在每个输 ...

随机推荐

  1. Html 5 坦克大战(韩顺平县版本号)

    html 5例如,下面的代码段: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/ ...

  2. Javascript J更深层次的理解avascript 基础知识

    eval全局函数 dojo loader会看到如下的功能    var eval_ = new Function('return eval(arguments[0]);'); //Function 函 ...

  3. transform:translateZ() 字体模糊问题 父类重返Z轴平面

    translateZ()变糊 第一种情况: 当translateZ(m)中的 m设置为 非整数,1.5px 之类的,字体会模糊,但是不明显;和浏览器渲染,字体格式,或者操作系统有关, 这个 css中 ...

  4. SQL开发中容易忽视的一些小地方( 三)

    原文:SQL开发中容易忽视的一些小地方( 三) 目的:这篇文章我想说说我在工作中关于in和union all 的用法. 索引定义 : 微软的SQL SERVER提供了两种索引:聚集索引(cluster ...

  5. a web-based music player(GO + html5)

    github 住址:https://github.com/codercheng/music-player 后台是用GO (windows/ linux 都能够),前端是HTML5 推荐用chrome浏 ...

  6. ORA-12545: Connect failed because target host or object does not exist

    [oracle@ybdbtest oradata]$ sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Production on Thu Jun 26 10: ...

  7. dojo加载树错误

    1.错误叙述性说明    error loading undefined children.    TypeError:this._arrayOfTopLevelItems is undefied. ...

  8. 脚本+批处理打造IIS监控器

    原文 脚本+批处理打造IIS监控器 首先说下我什么要写它,第一.它可以帮你做一件事,那就是随时给你监控你公司的网站服务器的状态,一旦你的网站出现问题不能访问了,它就会自动帮你重启IIS然后让死掉的网站 ...

  9. IOS遍历未知对象属性、函数

    #import <objc/runtime.h> @implementation NSObject (PropertyListing) /* 获取对象的全部属性 */ - (NSDicti ...

  10. Chain of Responsibility - 责任链模式

    定义 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度. 案例 比方如今有一个图形界面,它包含一个应用Application类,一个主窗体Window,一个buttonButton ...