ASP.NET MVC2 Model验证

ASP.NET MVC2 支持2种验证模式,一种是前端验证,一种是服务端验证。

我们一般做项目都是2种一起用的。先使用前端验证的好处毋庸置疑,因为它是在客户端执行的,它会把错误消息直接反馈给客户而无须经过服务器的处理,这样就节省了服务器宝贵的资源。而之后的服务器验证呢,又能保证数据的严格符合规格。


第一步:建立一个叫做Order的Model。

using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace MvcSimpleModelBinding.Models
{
    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代表的就是你的验证规则。比较详细的验证规则见以下列表:

  • Range – 是你的数据是不是在某一个范围内的意思。
  • ReqularExpression – 是你的数据是不是符合某一个正则表达式的意思
  • Required – 要求你的数据必须是非空的
  • StringLength – 要求你的字符串的长度必须小于或等于某一个值

代码中的ErrorMessage表示显示在页面上的错误信息。

你甚至可以写一个自定义的验证类,比如一个简单的例子,我需要让FirstName这个字段必须不以下划线开头,我们可以这么写:

首先创建一个类,叫做FirstNameAttribute,它必须继承ValidationAttribute这个类。

using System.ComponentModel.DataAnnotations;

namespace MvcSimpleModelBinding.Models
{
    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 cant start with \"_\"")]
public string FirstName { get; set; }

第二步:我们现在来建立一个View。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcSimpleModelBinding.Models.Order>" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>OrderCreate</title>
    <!--启用客户端验证--->
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
</head>
<body>
    <% Html.EnableClientValidation(); //启用客户端验证 %>
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend>Fields</legend>
            
            <div class="editor-label">
                <%: Html.LabelFor(model => model.FirstName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.FirstName) %>
                <%: Html.ValidationMessageFor(model => model.FirstName) %>
            </div>
            
            <div class="editor-label">
                <%: Html.LabelFor(model => model.LastName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.LastName) %>
                <%: Html.ValidationMessageFor(model => model.LastName) %>
            </div>
            
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Address) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Address) %>
                <%: Html.ValidationMessageFor(model => model.Address) %>
            </div>
            
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>

</body>
</html>



第三步:我们现在来建立一个Action。

// GET: /Person/Create
public ActionResult OrderCreate()
{
    return View();
}
[HttpPost]
public ActionResult OrderCreate(Order order)
{
    if (!ModelState.IsValid)
    {
        return View("OrderCreate", order);
    }
    return View();
}

http://www.2cto.com/kf/201104/88727.html


Model类中可以添加的验证标记:

1. 必填字段

[Required]

public string FirstName { get; set; }

2. 字段长度

至多n位:

[StringLength(160)]

public string FirstName { get; set; }

要求至少n位:

[StringLength(160, MinimumLength=3)]

public string FirstName { get; set; }

3. 正则验证

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

4. 范围

[Range(35,44)]

public int Age { get; set; }

小数的情况:

[Range(typeof(decimal), “0.00”, “49.99”)]

public decimal Price { get; set; }

5. 比较

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

[Compare(“Email”)]

public string EmailConfirm { get; set; }

6. 自定义错误消息

正则:

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”,

                   ErrorMessage=”Email doesn’t look like a valid email address.”)]

public string Email { get; set; }

普通文本:

[Required(ErrorMessage=”Your last name is required”)]

[StringLength(160, ErrorMessage=”Your last name is too long”)]

public string LastName { get; set; }

占位符:

[Required(ErrorMessage=”Your {0} is required.”)]

[StringLength(160, ErrorMessage=”{0} is too long.”)]

public string LastName { get; set; }

常用正则表达式

数字:"^[0-9]*$"。

n位的数字:"^\d{n}$"。

至少n位的数字:"^\d{n,}$"。

m~n位的数字:。"^\d{m,n}$"

零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。

有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

非零的正整数:"^\+?[1-9][0-9]*$"。

非零的负整数:"^\-[1-9][]0-9"*$。

长度为3的字符:"^.{3}$"。

由26个英文字母组成的字符串:"^[A-Za-z]+$"。

由26个大写英文字母组成的字符串:"^[A-Z]+$"。

由26个小写英文字母组成的字符串:"^[a-z]+$"。

由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。

由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。

验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。

验证是否含有^%&’,;=?$\"等字符:"[^%&’,;=?$\x22]+"。

只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"

验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。

验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。


http://www.cnblogs.com/yeagen/archive/2012/09/24/2700836.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值