ASP.Net MVC3提供了一种Remote Server Call机制,可以用来校验Form中某字段的合法性,而不用提交整个Form到服务器。当有一个字段不能使用客户端校验,而且提交到服务器后有可能会校验失败的时候,就可以采用远程服务器调用机制。例如:某些网站需要用户注册一个唯一的用户名。
下面实现一个简单的使用Remote Server Call机制验证用户名是否重复的实例
1、创建空MVC3项目,命名为MvcRemoteValidation
2、资源管理器,Models文件夹,右键,添加类,命名为User
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.ComponentModel.DataAnnotations; namespace MvcRemoteValidation.Models { public class User { [Required(ErrorMessage="姓名不能为空")] public string Name { get; set; } } }
3、资源管理器中,右键Controllers,添加一个Controller,命名为HomeController,如下图所示:
4、 HomeController中增加Action方法 IsUnique_Available(string name),校验是否已经存在name,代码如下:
public JsonResult IsUnique_Available(string name) { List<User> users = UserService.GetUsers(); users = users.Where(u => u.Name == name).ToList(); if (users.Count == 0) return Json(true, JsonRequestBehavior.AllowGet); string suggestedUID = String.Format(CultureInfo.InvariantCulture, "{0} 已经存在。", name); return Json(suggestedUID, JsonRequestBehavior.AllowGet); }
备注:此Action方法可以放在任何Controller中 ,没有限制。
5、类User的Name属性增加attribute
public class User { [Required(ErrorMessage="姓名不能为空")] [Remote("IsUnique_Available", "Home")] public string Name { get; set; } }
指定了Name的Remote 属性,并指定了执行此验证所需要调用的Action方法,以及此Action所在的Controller
5、按F5运行
Index页面如下:
已经存在Tom和Marry两个用户名。
6、点击Create New链接,打开新增窗口:
查看Html源文件,Input自动增加了data-val-remote-additionalfields=”*.Name”和data-val-remote-url=”/Home/IsUnique_Available”属性,”/Home/IsUnique_Available”就是在User类中为Name属性添加的Remote所指定的Controller和Action。
7、输入框中,输入Tom,则会出现提示:Tom已经存在。
8、源码链接:MvcRemoteValidation.rar