zoukankan      html  css  js  c++  java
  • ASP.NET MVC- 数据验证机制

      ASP.NET MVC的数据验证机制,比起ASP.NET WEBFORM那种高效很多。下面记录以下两个示例,以便日后方便查阅。

      方式一:在Controller里通过AddModelError方法返回错误的验证信息,看一下代码示例:

      Controller里的,注意看一下,他Add的时候提交是HTTPPOST,并且传参是传一个MODEL进来。

            public ActionResult Add()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult Add(Package.Model.Message message)
            {
                if (message.gName == null)
                {
                    ModelState.AddModelError("gName", "姓名不能为空");
                }
                if (message.gContent == null)
                {
                    ModelState.AddModelError("gContent", "内容不能为空");
                }
    
                if (ModelState.IsValid)
                {
                    MessageDal msgDao = new MessageDal();
                    msgDao.Add(message);
                    return View();
                }
    
                return View();
    
            }
    
        }

      View里面的

    @model  Package.Model.Message
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Add</title>
    </head>
    <body>
        <div>
            @using (Html.BeginForm())
            {
                @Html.ValidationSummary(true);
                <fieldset>
                    <legend>我要留言</legend>
                    <div>
                        留言名称:@Html.TextBoxFor(a => a.gName)
                        @Html.ValidationMessageFor(a => a.gName)
                    </div>
                    <div>
                        留言内容:@Html.TextBoxFor(a => a.gContent)
                        @Html.ValidationMessageFor(a => a.gContent)
                    </div>
                    <input type="submit" id="btnAdd" value="提交留言" />
                </fieldset>
            }
        </div>
    </body>
    </html>

      方式二:直接在MODEL层里添加上验证

      如何把数据验证交给Model呢?这里需要引用一个DLL:System.ComponentModel.DataAnnotations

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Text;
    
    namespace Package.Model
    {
        /// <summary>
        /// Message:实体类(属性说明自动提取数据库字段的描述信息)
        /// </summary>
        
        [Serializable]
        public partial class Message
        {
            public Message()
            { }
            #region Model
            private int _id;
            private string _gname;
            private string _gcontent;
           
            public int Id
            {
                set { _id = value; }
                get { return _id; }
            }
            
            [DisplayName("姓名")]
            [Required(AllowEmptyStrings = false, ErrorMessage = "姓名不能为空")]
            public string gName
            {
                set { _gname = value; }
                get { return _gname; }
            }
    
            [Required(AllowEmptyStrings = false, ErrorMessage = "内容不能为空")]
            public string gContent
            {
                set { _gcontent = value; }
                get { return _gcontent; }
            }
            #endregion Model
    
        }
    }

      更多在MODEL里验证的丰富示例:

    namespace MvcApplication4.Models
    {
        public class UserInfo
        {
            //ID编号
            [ScaffoldColumn(false)]
            [Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]
            [Display(Name = "记录编号", Order = 20000)]
            public int ID { get; set; }
    
            [Display(Order = 15000)]
            [Required(AllowEmptyStrings = false, ErrorMessage = "用户名不能为空")]
            [StringLength(20, MinimumLength = 6, ErrorMessage = "用户名不能大于{2} 且要小于{1}")]
            [Remote("User", "Validate", HttpMethod = "post", ErrorMessage = "用户名已经存在")]
            public string UserName { get; set; }
    
            
            [Display(Name="password")]
            [DataType(DataType.Password)]
            [Required(AllowEmptyStrings = false, ErrorMessage = "密码不能为空")]
            [StringLength(60, MinimumLength = 20, ErrorMessage = "密码必须在{2} 和{1}之间")]
            public string UserPassword { get; set; }
    
            [Required(AllowEmptyStrings = false, ErrorMessage = "邮箱必填")]
            [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9]+.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
            public string Email { get; set; }
    
            [Compare("Email", ErrorMessage = "邮箱要相同")]
            public string TEmail { get; set; }  //compare 大小写要相同 否则不会触发 验证
    
    
            [Display(Name = "身份证号码")]
            [RegularExpression(@"d{17}[d|x]|d{15}", ErrorMessage = "身份证号码格式错误")]
            public string IdentityNo { get; set; }
    
            [Required(AllowEmptyStrings = false, ErrorMessage = "年龄必填")]
            [Range(10, 100, ErrorMessage = "年龄不能大于{2} 不能小于{1}")]
            public int Age { get; set; }
    
            [ReadOnly(true)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
            [Required(ErrorMessage = "金额不能为空")]
            [Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]
            public decimal Money { get; set; }
        }
    }

      参考文章:http://www.cnblogs.com/jiagoushi/archive/2013/01/25/2876725.html

  • 相关阅读:
    20170719 Mysql 配置远端Mysql访问,增加表/存储过程
    20170720 Celery 异步任务处理到Sql Server 发生死锁
    20170718 关于Mysql 安装于虚拟机Ubuntu中,内网中Windows系统无法访问
    20170712 SQL Server 日志文件收索
    SQL Server 2016 发送邮件功能
    Sql server 函数--取值年月
    SSIS--(1)
    Hadoop 尝试
    百度之星复赛T6&&hd6149 ——Valley Numer II
    百度之星复赛T5&&hdu6148
  • 原文地址:https://www.cnblogs.com/cxeye/p/4973398.html
Copyright © 2011-2022 走看看