贾湖骨笛价值:学习笔记:ASP.NET MVC2 之验证 - 看花开花落 - 博客园
大家好,最近忙于工作,现在又有空闲了,现在一起来温习一下ASP.NET MVC 2 的Validation功能。
ASP.NET MVC2 支持2种验证模式,一种是前端验证,一种是服务端验证。我们一般做项目都是2种一起用的。先使用前端验证的好处毋庸置疑,因为它是在客户端执行的,它会把错误消息直接反馈给客户而无须经过服务器的处理,这样就节省了服务器宝贵的资源。而之后的服务器验证呢,又能保证数据的严格符合规格。
第一步:好,我们先来建立一个叫做Order的Model。
namespace MvcApplication1.Models
{
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public class Order
{
[Required(ErrorMessage = "First Name is required")]
[DisplayName("First Name")]
[StringLength(160)]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last Name is required")]
[DisplayName("Last Name")]
[StringLength(160)]
public string LastName { get; set; }
[Required(ErrorMessage = "Address is required")]
[StringLength(70)]
public string Address { get; set; }
}
}
在这个Model里面,这些Required,StringLength代表的就是你的验证规则。比较详细的验证规则见以下列表:
代码中的ErrorMessage表示显示在页面上的错误信息。
你甚至可以写一个自定义的验证类,比如一个简单的例子,我需要让FirstName这个字段必须不以下划线开头,我们可以这么写:
首先创建一个类,叫做FirstNameAttribute,它必须继承ValidationAttribute这个类。
namespace MvcApplication1.Models
{
using System.ComponentModel.DataAnnotations;
public class FirstNameAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null)
return false;
if (value.ToString().StartsWith("_"))
return false;
return true;
}
}
}
然后我们就能在FirstName这个字段上加上一个约束的规则。
[Required(ErrorMessage = "First Name is required")]
[DisplayName("First Name")]
[StringLength(160)]
[FirstName(ErrorMessage="First Name can't start with \"_\"")]
public string FirstName { get; set; }
第二步:我们现在来建立一个View。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
Order
Order
<%using (Html.BeginForm())
{ %>
<%:Html.LabelFor(m=>m.FirstName) %><%:Html.TextBoxFor(m=>m.FirstName) %><%:Html.ValidationMessageFor(m=>m.FirstName) %>
<%:Html.LabelFor(m=>m.LastName) %><%:Html.TextBoxFor(m=>m.LastName) %><%:Html.ValidationMessageFor(m=>m.LastName) %>
<%:Html.LabelFor(m=>m.Address) %><%:Html.TextBoxFor(m=>m.Address) %><%:Html.ValidationMessageFor(m=>m.Address) %>
<%} %>
第三步:在Controller里面加入要处理你这个提交的请求的controller Method.
[HttpPost]
public ActionResult Order(Order orderModel)
{
if (ModelState.IsValid)
{
//Do what you want
return RedirectToAction("Index");
}
else
{
return View(orderModel);
}
}
到这里,一个服务器端的验证已经完成,可以试用一下效果:
好了,如果要想实现前段验证,只需要做以下几个简单的步骤就可以实现了:
将这三个js加入到你的master page里面:
接着在你的 using (Html.BeginForm())之前加入以下代码:
<%Html.EnableClientValidation(); %>
这样就大功告成了,有心的朋友可以发现,你刷新完页面后,代码里面多了一些js代码,这些应该就是实现前段验证的代码:
好了,至此为止,我们已经完成了温习ASP.NET MVC2的Validation这个重要的功能。