当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET MVC5验证系列之Remote Validation

ASP.NET MVC5验证系列之Remote Validation

2017年12月12日  | 移动技术网IT编程  | 我要评论

神盾局特工第三季13,小学三年级数学上册教案,雨林战车

大多数的开发者,可能会遇到这样的情况:当我们在创建用户之前,有必要去检查是否数据库中已经存在相同名字的用户。换句话说就是,我们要确保程序中,只有一个唯一的用户名,不能有重复的。相信大多数人都有不同的解决方法,但是asp.net mvc中,为我们提供了一个特性,就是remote validation,用它可以解决类似这样的问题。

remote validation调用了一个ajax请求,可以是get或者post方式,接着调用方法,这个方法,至少要有一个参数,并且方法的返回类型是json格式的。【mvc中通过jsonresult来做到】,这个方法的参数就是要验证的实体的属性【必须,否则不能验证,参数的大小写无所谓。】,如果这个验证的方法返回值是true,那么就表名存在相同的用户,我们就返回false,给前台页面。表明验证不通过。

好了,直接说正题吧!
首先新建一个空白的mvc项目,在model文件夹下,新建一个类remoteuser: 

public class remoteuser
 { 
 public string name { get; set; } 
 public string email { get; set; }
 
 }

然后建一个测试的数据类: 

 public static class myremotestaticdata
 {
 public static list<remoteuser> remotelist
 {
 get
 {
 return new list<remoteuser>()
 {
 new remoteuser(){name="daniel",email="daniel@163.com"},
 new remoteuser(){name="cfs",email="cfs@163.com"}
 };
 }

 }
 }

 

在新建一个控制器myremotecontroller 【主要用来remote验证】:

using server_side_validation_in_mvc.staticdata;
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace server_side_validation_in_mvc.controllers
{
 public class myremotecontroller : controller
 {
 // get: myremote
 public jsonresult remotevalidate(string name) //这里的参数名字,必须要和视图中文本框控件的名字一样,但大小写无所谓
 {
 //如果存在用户名,即isexists=true
 bool isexists = myremotestaticdata.remotelist.
 where(s => s.name.tolowerinvariant().
  equals(name.tolower())).firstordefault() != null;
 //就向前台返回false,表明已经存在username
 return json(!isexists,jsonrequestbehavior.allowget);
 }

 

 
}

上面添加完验证之后,我们来修改一下model实体:

using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace server_side_validation_in_mvc.models
{
 public class remoteuser
 {
 [remote("remotevalidate", "myremote", errormessage = "抱歉用户名已经存在!请重新输入!!!")]
 public string name { get; set; }

 
 public string email { get; set; }

 
 }
}

然后在新建一个测试的控制器: 

using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace server_side_validation_in_mvc.controllers
{
 public class usercontroller : controller
 {
 

 public actionresult addremoteuser()
 {
 return view();
 }
 }
}

添加addremoteuser视图,【注意这里,remote validation是需要引入jquery插件和启用客户端验证的】

这里勾选引入脚本库,也主要是用来引入jquery插件。 

@model server_side_validation_in_mvc.models.remoteuser

@{
 viewbag.title = "addremoteuser";
}

<h2>addremoteuser</h2>


@using (html.beginform()) 
{
 @html.antiforgerytoken()
 
 <div class="form-horizontal">
 <h4>remoteuser</h4>
 <hr />
 @html.validationsummary(true, "", new { @class = "text-danger" })
 <div class="form-group">
 @html.labelfor(model => model.name, htmlattributes: new { @class = "control-label col-md-2" })
 <div class="col-md-10">
 @html.editorfor(model => model.name, new { htmlattributes = new { @class = "form-control" } })
 @html.validationmessagefor(model => model.name, "", new { @class = "text-danger" })
 </div>
 </div>

 <div class="form-group">
 @html.labelfor(model => model.email, htmlattributes: new { @class = "control-label col-md-2" })
 <div class="col-md-10">
 @html.editorfor(model => model.email, new { htmlattributes = new { @class = "form-control" } })
 @html.validationmessagefor(model => model.email, "", new { @class = "text-danger" })
 </div>
 </div>

 

 <div class="form-group">
 <div class="col-md-offset-2 col-md-10">
 <input type="submit" value="create" class="btn btn-default" />
 </div>
 </div>
 </div>
}

<div>
 @html.actionlink("back to list", "index")
</div>

<script src="~/scripts/jquery-1.10.2.min.js"></script>
<script src="~/scripts/jquery.validate.min.js"></script>
<script src="~/scripts/jquery.validate.unobtrusive.min.js"></script>

然后修改一下默认的路由: 

public static void registerroutes(routecollection routes)
 {
 routes.ignoreroute("{resource}.axd/{*pathinfo}");

 routes.maproute(
 name: "default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "user", action = "addremoteuser", id = urlparameter.optional }
 );
 }

运行项目:

输入测试数据:cfs,按tab键后,自动就进行验证了。 

这里我们对name字段就进行了remote验证,现在我想对email字段进行验证,需要使用到additionalfields,属性,还需要另外添加一个验证方法: 

using server_side_validation_in_mvc.staticdata;
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace server_side_validation_in_mvc.controllers
{
 public class myremotecontroller : controller
 {
 // get: myremote
 public jsonresult remotevalidate(string name) //这里的参数名字,必须要和视图中文本框控件的名字一样,但大小写无所谓
 {
 //如果存在用户名,即isexists=true
 bool isexists = myremotestaticdata.remotelist.
 where(s => s.name.tolowerinvariant().
  equals(name.tolower())).firstordefault() != null;
 //就向前台返回false,表明已经存在username
 return json(!isexists,jsonrequestbehavior.allowget);
 }


 public jsonresult remotevalidationaddtional(string name, string email)
 {
 //如果存在用户名,即isexists=true
 bool isexists = myremotestaticdata.remotelist.
 where(s => s.name.tolowerinvariant().
  equals(name.tolower()) && s.email.tolowerinvariant().equals(email.tolower())).firstordefault() != null;
 //就向前台返回false,表明已经存在username
 return json(!isexists, jsonrequestbehavior.allowget);
 }
 }
}

 

然后修改对应的实体类: 

using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace server_side_validation_in_mvc.models
{
 public class remoteuser
 {
 [remote("remotevalidate", "myremote", errormessage = "抱歉用户名已经存在!请重新输入!!!")]
 public string name { get; set; }

 //注意,这里的additionalfields="name",name字段必须和modle中的字段完全一样
 [remote("remotevalidationaddtional", "myremote", additionalfields = "name", errormessage = "抱歉email已经存在!请重新输入!!!")]
 public string email { get; set; }

 } 
 }

接着运行项目:

输入在测试类中写的测试数据:

这里就对两个字段进行了remote validation了。
上面使用了additionalfields 验证字段,如果我们想要验证不只一个字段,可以在addtionalfiled里面添加,以逗号分隔就行了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网