大多数开发人员可能会遇到这样的情况:在创建用户之前,需要检查数据库中是否已经存在同名用户。换句话说,我们需要确保程序中只有一个唯一的用户名,并且不允许有重复的用户名。相信大多数人都有不同的解决方案,但是ASP.NET MVC给我们提供了一个功能,那就是远程验证,可以解决类似的问题。
远程验证调用一个Ajax请求,该请求可以是GET或POST模式,然后调用方法,该方法必须至少有一个参数,并且方法的返回类型是Json格式。【MVC中使用JSOnResult】,这个方法的参数是需要验证的实体的属性【必须,否则无法验证,参数的大小写无关紧要。】,如果这个验证方法的返回值为true,那么表名中就存在同一个用户,所以我们会返回false到前台页面。表示验证失败。
好了,言归正传!首先,创建一个空白的MVC项目,并在Model文件夹下创建一个新的类RemoteUser:
公共类远程用户{公共字符串名称{ get设置;}公共字符串Email { get设置;}}然后创建一个测试数据类:
公共静态类MyRemoteStaticData {公共静态list remote user remote list { get { return new list remote user(){ new remote user(){ Name=' Daniel ',Email='[emailprotected]'},new RemoteUser(){Name='CFS ',Email='[Email protected]' } };}}}新建控制器myremotechontcontroller[主要用于远程验证]:
使用服务器端验证。StaticData使用系统;使用系统。集合。通用;使用系统。Linq使用系统。Web使用系统。Web . Mvc命名空间Server_Side_Validation_IN_MVC。controllers { public class myremotechontroller : Controller { //Get : my remote public JSON结果remote validate(字符串名称)//此处的参数名称必须与视图中文本框控件的名称相同,但大小写无关紧要{//如果有用户名,即is exists=true bool is exists=myremotestticdata . remote list . where(s=s . name . to lower不变量()。equals (name.tolower()))。firststoredefault()!=null//返回false到前台,表示userName返回Json(!isExists,JsonRequestBehavior。allow get);}}添加以上验证后,让我们修改模型实体:
使用系统;使用系统。集合。通用;使用系统。Linq使用系统。Web使用系统。Web . Mvc命名空间server _ side _ validation _ in _ MVC . models {公共类远程用户{[remote ('remote validate ',' my remote ',errormessage='抱歉,用户名已经存在!请重新输入!')]公共字符串Name { get设置;}公共字符串Email { get设置;}}}然后创建一个新的控制器进行测试:
使用系统;使用系统。集合。通用;使用系统。Linq使用系统。Web使用系统。Web . Mvc命名空间Server_Side_Validation_IN_MVC。控制器{公共类用户控制器:控制器{公共操作结果AddRemoteUser() {返回视图();}}}添加AddRemoteUser视图,[注意这里,远程验证需要引入Jquery插件并启用客户端验证]
点击这里介绍脚本库,主要用来介绍Jquery插件。
@ model Server _ Side _ Validation _ IN _ MVC .模型。远程用户@{视图包Title=' addremote user } H2 addremote user/H2 @使用(Html .begin inform()){ @ Html .antiforgrytoken()div class=' form-horizontal ' H4远程用户/H4 HR/@ Html .ValidationSummary(true,",new { @ class=' text-danger ' })div class=' form-group ' @ Html .标签(型号=型号.名称,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.名称,新的{ HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .名称',new { @ class=' text-danger ' })/div/div class=' form-group ' @ Html .标签(型号=型号.电子邮件,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.电子邮件,新的{ HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .电子邮件,',new { @ class=' text-danger ' })/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='提交'值=' Create ' class=' BTN BTN-默认'//div/div } div @ Html .ActionLink('Back to List ',' Index ')/div脚本src=' http : ~/Scripts/jquery-1。10 .2 .量滴js '/script script src=' http : ~/Scripts/jquery。验证。量滴js '/script script src=' http : ~/Scripts/jquery。验证。未破裂。量滴js '/脚本然后修改一下默认的路由:
公共静态无效注册路由(常规选择路由){路线.忽略重路由(' {resource}).axd/{ * PathInfo } ');路线MapRoute(名称: '默认',URL : " { controller }/{ action }/{ id } ",默认s 3360新{ controller=' User ',action='AddRemoteUser ',id=UrlParameter .可选});}运行项目:
输入测试数据:CFS,按标签键后,自动就进行验证了。
这里我们对名字字段就进行了遥远的验证,现在我想对电子邮件字段进行验证,需要使用到附加字段,属性,还需要另外添加一个验证方法:
使用服务器端验证静态数据.使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节命名空间服务器端验证.控制器{公共类MyRemoteController :控制器{ //GET: MyRemote公共JsonResult RemoteValidate(字符串名称)//这里的参数名字,必须要和视图中文本框控件的名字一样,但大小写无所谓{ //如果存在用户名,即isExists=true bool isExists=myremotestatictdata。远程列表。其中(s=s .名称。ToLowerInvariant().等于(姓名ToLower())).FirstOrDefault()!=null/就向前台返回假的,表明已经存在用户名返回Json(!isExists,JsonRequestBehavior .允许get);} public JsonResult远程验证addional(字符串名称,字符串电子邮件){ //如果存在用户名,即isExists=true bool isExists=myremotestatictdata。远程列表。其中(s=s .名称。ToLowerInvariant().等于(姓名. ToLower())s . email。ToLower不变量()。等于(电子邮件ToLower())).FirstOrDefault()!=null/就向前台返回假的,表明已经存在用户名返回Json(!isExists,JsonRequestBehavior .允许get);} }}然后修改对应的实体类:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节命名空间服务器端验证.模型{公共类远程用户{[远程验证('远程验证',' MyRemote ',' ErrorMessage='抱歉用户名已经存在!请重新输入!')]公共字符串名称{ get设置;} //注意,这里的附加字段='名称,名称字段必须和Modle中的字段完全一样[远程(“RemoteValidationAddtional”,“MyRemote”,additional field=“Name”,ErrorMessage=”抱歉电子邮件已经存在!请重新输入!')]公共字符串电子邮件{ get设置;} } }接着运行项目:
输入在测试类中写的测试数据:
这里就对两个字段进行了远程验证了。上面使用了附加字段验证字段,如果我们想要验证不只一个字段,可以在添加国家字段里面添加,以逗号分隔就行了。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。