ASP.NET MVC3 Use Remote Validation

     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,如下图所示:

image

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页面如下:

image

已经存在Tom和Marry两个用户名。

 

6、点击Create New链接,打开新增窗口:

image

查看Html源文件,Input自动增加了data-val-remote-additionalfields=”*.Name”和data-val-remote-url=”/Home/IsUnique_Available”属性,”/Home/IsUnique_Available”就是在User类中为Name属性添加的Remote所指定的Controller和Action。

image

7、输入框中,输入Tom,则会出现提示:Tom已经存在。

image

8、源码链接:MvcRemoteValidation.rar

 

 

posted @ 2011-07-06 12:59  kinglau  阅读(4223)  评论(6编辑  收藏  举报