MVC前台+后台 数据验证

MVC数据验证参考资料:http://blog.csdn.net/weizhiai12/article/details/37612819

Model

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

namespace MvcAppTest.Models
{
    public class UserInfo
    {
        [DisplayName("用户编号")]
        [Required(ErrorMessage="不能为空")]
        public int Id { get; set; }

        [DisplayName("用户名")]
        [Required(ErrorMessage = "用户名不能为空")]
        [StringLength(12, MinimumLength = 2, ErrorMessage = "用户名的长度应该在2到12位之间")]
        [RegularExpression("^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", ErrorMessage = "用户名必须为中文")] //正则表达式
        [System.Web.Mvc.Remote("CheckUserName", "Home", HttpMethod = "post", ErrorMessage = "用户名已存在")] //异步请求数据。到时候会将以UserName为key,UserName的值为value传递到Home控制下的CheckUserName方法中。在CheckUserName方法中只要用Request.Form["UserName"]就能取到UserName的值。注意CheckUserName方法的返回值只能是“false”或者"true"
        public string UserName { get; set; }


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



        //[Range(typeof(decimal),"0.00","49.99")] decimal类型
        //[Range(10, 100, ErrorMessage = "年龄不能大于{2} 不能小于{1}")]
        //[Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]

        [DisplayName("年龄")]
        [Required]
        [Range(1, 120, ErrorMessage = "年龄应该在1到120岁之间")] //Range只能约束一个数值的区间(即:只能约束数字)      
        public int Age { get; set; }

        [DisplayName("密码")]
        [Required(ErrorMessage = "密码不能为空")]
        //[DataType(DataType.Password)] //这个DataType可以点出很多东西出来,比如信用卡号,货币,日期值,电子邮件地址,HMTL文件,表示图像的URL,多行文本,密码输入框,电话号码,邮政代码,URL等等。它一般是在视图中配合@Html.EditorFor(r=>r.***) 来使用 (当然不这样用也是可以的,如果是密码输入框,我们在视图中直接这样写就可以了 @Html.PasswordFor(r=>r.***) )
        public string Password { get; set; }

        [DisplayName("确认密码")]
        [Compare("Password", ErrorMessage = "确认密码必须与原始密码保持一致")]
        public string confirmpwd { get; set; }

        [EmailAddress(ErrorMessage="请确认邮箱是否填写正确")]
        public string Email { get; set; }
    }
}

Home控制器

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

namespace MvcAppTest.Controllers
{
    public class HomeController : Controller
    {
        //进入视图
        public ActionResult Index()
        {
            UserInfo u = new UserInfo() { Id = 1, UserName = "无盐海", Age = 26, Password = "123456" };

            return View(u);
        }

        [HttpGet] //进入新增的视图
        public ActionResult Add()
        {
            return View(new UserInfo());
        }
        [HttpPost] //用户添加数据 (后台验证数据)
        public ActionResult Add(UserInfo u)
        {
            try
            {
                //throw new Exception("用户自定义异常~~~~~");

                //后台检查UserName实体中的所有属性是否合法
                //使用ModelState的要求:传入给add方法的参数属性上必须要有特性标签
                if (ModelState.IsValid == false)
                {
                    //如果ModelState.IsValid == false就表示UserInfo这个实体类对象中贴了特性标签的所有属性中至少有一个属性验证不通过(它会遍历UserInfo这个类对象的所有属性,检查属性上面的特性标签,然后判断用户输入的数据是否符合特性标签的约束条件,如果不符合就返回了fase)

                    //加入程序员自定义的提示信息
                    ModelState.AddModelError("", "实体验证不合法");

                    return View(); //数据验证不通过后,重新跳到新增页面。
                }

                //.............数据验证全部通过。这里则是将模型保存到数据库的操作

                return View();  //将模型数据保存到数据库后跳转到Add页面,获取跳转到其他的页面
            }
            catch (Exception ex)
            {
                //将异常的简述告诉用户(在视图页面用@Html.ValidationSummary(true)来显显示异常错误的值)
                ModelState.AddModelError("", ex.Message);
                return View();
            }
        }

        //验证用户名是否存在
        public ActionResult CheckUserName(string UserName)
        {
            if (UserName == "无盐海")
            {
                return Content("false");
            }
            return Content("true");
        }

    }
}

Index视图

@{
    Layout = null;
}
@model MvcAppTest.Models.UserInfo




    

    
    
    
    
    


    
@Html.DisplayNameFor(r => r.Id) @Html.TextBoxFor(r => r.Id) @Html.ValidationMessageFor(r => r.Id)
@Html.DisplayNameFor(r => r.UserName) @Html.TextBoxFor(r => r.UserName) @Html.ValidationMessageFor(r => r.UserName)
@Html.DisplayNameFor(r => r.Age) @Html.TextBoxFor(r => r.Age) @Html.ValidationMessageFor(r => r.Age)
@Html.DisplayNameFor(r => r.Password) @Html.PasswordFor(r => r.Password) @Html.ValidationMessageFor(r => r.Password)
@Html.DisplayNameFor(r => r.confirmpwd) @Html.TextBoxFor(r => r.confirmpwd) @Html.ValidationMessageFor(r => r.confirmpwd)
新增
@Html.ValidationSummary(true)

Add视图 (和Index视图基本上是一样的)

@{
    Layout = null;
}

@model MvcAppTest.Models.UserInfo




    

    
    
    
    
    


    
@Html.HiddenFor(r => r.Id)
@Html.DisplayNameFor(r => r.UserName) @Html.TextBoxFor(r => r.UserName) @Html.ValidationMessageFor(r => r.UserName)
@Html.DisplayNameFor(r => r.Age) @Html.TextBoxFor(r => r.Age) @Html.ValidationMessageFor(r => r.Age)
@Html.DisplayNameFor(r => r.Password) @Html.PasswordFor(r => r.Password) @Html.ValidationMessageFor(r => r.Password)
@Html.DisplayNameFor(r => r.confirmpwd) @Html.TextBoxFor(r => r.confirmpwd) @Html.ValidationMessageFor(r => r.confirmpwd)
@Html.ValidationSummary(true)
MVC前台+后台 数据验证_第1张图片
 当禁用JS脚本后 (即:不再进行前端验证后的提示)

MVC前台+后台 数据验证_第2张图片

你可能感兴趣的:(Mvc)