首页 > 代码库 > MVC 数据验证

MVC 数据验证

控制器 Home

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication2.Models;

namespace MvcApplication2.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {

            return View();
        }

        /// <summary>
        /// 检查用户名是否有重复
        /// </summary>
        /// <param name="userName">用户在页面(视图)表单中输入的UserName</param>
        /// <returns>Json</returns>
        public ActionResult CheckUserName(string userName)
        {
            bool result = false;
            using (var datas = new salesEntities())
            {
                var query = from userinfo in datas.T_UserInfo
                            where userinfo.Name == userName
                            select new { Name= userinfo.Name };
                if (query == null || !query.Any())
                {
                    result = true;
                }
                          
            }
            
            return Json(result,JsonRequestBehavior.AllowGet);
        }



    }
}

Model(UserInfo)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace MvcApplication2.Models
{
    /// <summary>
    ///  这些例子就是验证的,注意此处没有客户端验证,完全是服务器端验证的,如果出错,视图会渲染再次显示,非常好用啊,很方便啊,要在以前你要写多少行代码来搞定这些繁琐无味的验证呢?微软太体恤程序员了,顶一个。
    ///  在下面的例子当中,当数据发送到服务器验证不通过之后,则所有用户填写的内容在重新打开的页面后都清空了, 如果想不清空,即用户第一次填的内容还存在的话,可以return View(接受到的对象);
    /// </summary>
    public class UserInfo
    {
        public int Id { get; set; } //ID
        /// <summary>
        ///DisplayName:指定当前字段显示的名称
        ///StringLength:指定允许的长度,括号里的第一个参数是最大长度,第二个参数是最小长度。最后一个参数是指:单字段值的长度不符合第一第二参数规定时候,提示错误的内容
        ///Required:表示当前字段是必填选项,当提交的表单缺少该值就引发验证错误。括号里的AllowEmptyStrings是: 获取或设置一个值,该值指示是否允许空字符串。单值为false的时候表示当前字段的值不能为空
        ///Remote:允许利用服务器端的回调函数执行客户端的验证逻辑。说白了就是支持AJAX验证。括号里的CheckUserName是Action方法。Home是控制器       
        /// </summary>
        [DisplayName("用户名")]
        [Required(AllowEmptyStrings=false, ErrorMessage="用户名不能为空")]
        [StringLength(10,MinimumLength=2,ErrorMessage="用户名长度不能大于{2}且要小于{1}")]
        [Remote("CheckUserName", "Home", ErrorMessage = "用户名已经存在")] 
        public string UserName { get; set; } //用户名
        
        [DisplayName("用户密码")]
        [DataType(DataType.Password)] //将密码已*号的形式来显示
        [Required(AllowEmptyStrings=false,ErrorMessage="密码不能为空")]
        [StringLength(12,MinimumLength=6,ErrorMessage="密码必须在{2}和{1}之间")]
        public string UserPassword { get; set; } //用户密码

        [DataType(DataType.Password)]
        [Compare("UserPassword",ErrorMessage="密码不一致")]
        [DisplayName("请再次确认密码")]
        public string TUserPassword{get;set;}  //再次输出密码

        /// <summary>
        /// RegularExpression:表示当前字段的值要符合一个正则表达式。如果不能匹配,则报一个验证错误。ErrorMessage的内容就是验证错误的具体信息。
        /// </summary>
        [Display(Name = "邮箱")] //也可以写成  [DisplayName("邮箱")]
        [Required(AllowEmptyStrings=false,ErrorMessage="邮箱不能为空")]
        [DataType(DataType.EmailAddress,ErrorMessage="请输入有效的邮箱地址")] //其实也可以用以下的正则表达式来验证邮箱
        //[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
        public string Email { get; set; } //邮箱

        [DisplayName("请再次确认邮箱")]        
        [Compare("Email",ErrorMessage="两次输入的邮箱不一致")]
        //[DataType(DataType.EmailAddress, ErrorMessage = "请输入有效的邮箱地址")]
        public string TEmail { get; set; } //再次输入邮箱

        [DisplayName("身份证")]
        [RegularExpression(@"\d{17}[\d|x]|\d{15}", ErrorMessage = "身份证号码格式错误")]
        public string IdentityNo { get; set; } //身份证号

        /// <summary>
        /// Range:用来指定数值类型值的最小值和最大值。括号里的第一个数的“最小值”第二个参数是“最大值”
        /// </summary>
        [DisplayName("年龄")]
        [Required(AllowEmptyStrings=false,ErrorMessage="年龄不能为空")]
        [Range(10,150,ErrorMessage="年龄不能大于{2},且不能小于{1}")]
        public int Age { get; set; } //年龄

        /// <summary>
        /// DisplayFormat:用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。
        /// </summary>
        [DisplayName("金额")]
        [DataType(DataType.Currency)] //Currency:表示货币值
        [DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="{0:c}")]
        [Required(ErrorMessage = "金额不能为空")]
        [Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]
        public decimal Money { get; set; } //金额

        [Display(Name="手机号码")]        
        //[DataType(DataType.PhoneNumber)]
        [RegularExpression(@"((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)", ErrorMessage = "格式不正确")]
        public int Phome { get; set; }


        [Display(Name="生日")]
        //[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString="yyyy/MM/dd")]
        [Required] //当前字段的值不能为空
        public DateTime Birthday { get; set; } //生日

        [Display(Name="备注")]
        [DataType(DataType.MultilineText)] //当前字段是个多行文本
        public string Remarks { get; set; } //备注


    }
}

View (Index)

@model MvcApplication2.Models.UserInfo

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <script src=http://www.mamicode.com/"~/Scripts/jquery-1.7.1.min.js"></script>>


MVC 数据验证