Asp.Net MVC entity framework模型验证

一、不修改EF自动生成类,添加注解校验

添加扩展模型类:
    /// <summary>
    /// 用户 视图校验类
    /// </summary>
    internal class UsersMetadata
    {
        [Display(Name = "姓名")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "姓名不能为空")]
        public string Name { get; set; }
        [Display(Name = "手机号码")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "手机号码不能为空")]
        public string Mobile { get; set; }
    }

    [MetadataType(typeof(UsersMetadata))]
    public partial class Users
    {

    }
控制器后台代码:
        /// <summary>
        /// 确定用户新增
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public ContentResult UsersAdd(Users model)
        {
            string flag = "0";
            if (ModelState.IsValid)
            {
                #region 用户新增
                UsersBLL bll = new UsersBLL();                
                model.RegisterDate = DateTime.Now;//注册日期 

                flag = bll.Insert(model).ID > 0 ? "1" : "0";
                #endregion
            }
            return Content(flag);
        }

二、基本校验使用

原文地址:http://www.cnblogs.com/showstyle/p/3336369.html

StringLength特性-限制长度

         这个特性看它命名规则就知道它是什么意思了,字符串长度对吧。是的你没看错,就是字符串长度。实例代码:

[StringLength(20,ErrorMessage = "密码不能超过20个字符")]
public string Password { get; set; }

我们只需要在模型属性上加上这么个特性,那么校验的时候这个字符串不能超过20个字符。ErrorMessage就是校验不通过时的消息。

Required特性-不能为空

         这个特性表必须的、不能为空的。用于不为空校验。默认为不允许为空。允许为空则添加AllowEmptyStrings = true

[Required(ErrorMessage = "密码不能超过20个字符")]
public string Password { get; set; }

RegularExpression-规则校验(正则校验)

         正则表达式在校验中是必不可少的一部分、微软也为我们提供了这个类型,非常方便的使用。

[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "邮箱不正确")]
public string Email { get; set; }

Range-数值范围

         当对一个数值进行校验时、一般可能会用到取值范围。比如年龄:

[Range(0,120,ErrorMessage = "年龄取值范围0-120")]
public int Age { set; get; }

Compare-比较

         比较两个值是否一致,一般用于二次输入。Password是需要比较的值

[Compare("Password",ErrorMessage = "两次输入不一致")]
public string PasswordConfirm { get; set; }

Remote-远程校验

         这个在登录的时候用的非常多。比如你的用户名ID是否已经被注册,这是需要从数据库查询之后才知道的。这个类有些特殊,它不在System.ComponentModel.DataAnnotations命名空间下,它是在System.Web.Mvc;命名空间下的。

 

[Remote("CheckUserName","Register",ErrorMessage = "用户名已被注册")]
public string UserName { get; set; }

 

Action:代表你要请求的方法

Controller:表示你要请求的控制器

这个特性有一个约定,就是你请求的这个路径必须返回True或False,并且是以Json格式返回的。至于返回True或False的逻辑,看大家自己的需求了。

 

public ActionResult CheckUserName()
{
     return Json(false, JsonRequestBehavior.AllowGet);
}

Display-显示名称

         这个特性、个人认为不属于校验里面的一部分,它只是用户前台展示时的一个显示名称。后面在为大家讲解这个的实际应用

[Display(Name = "年龄")]
 public int Age { set; get; }

数据绑定及验证

首先要进行客户端校验有几个比较重要的点:

1、  必须要用@Html.BeginForm()这种方式包含住输入标签。(自己试验了下,是这样的。如果有错误请好心提醒)

2、  必须要用强类型页面。

3、  必须要引用Jquery库、Jquery.Validate、Jquery.Validate.unobtrusive这三个文件

4、  web.config文件中这两个值必须为True。默认为True

 

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

三、自定义数据注解

    public class EnglishCharAttribute : ValidationAttribute //RegularExpressionAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            Regex reg = new Regex("^[a-z]+$");
            if (reg.IsMatch(value.ToString()))
            {
                return ValidationResult.Success;
            }
            else
            {
                return new ValidationResult("必须为英文字符!!!!");
            }
        }

        //public EnglishCharAttribute()
        //    : base(@"^[a-z]+$")
        //{
        //}
    }
更多参考:
http://www.cnblogs.com/zhangkai2237/archive/2012/12/12/2814825.html
http://blog.csdn.net/chengly0129/article/details/7828441
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值