ASP.NET MVC5中的Model验证

Model验证是ASP.NET MVC中的重要部分,这篇文章就介绍下ASP.NET MVC中Model验证的几种方式。

DataAnnotation

DataAnnotation翻译过来是“数据注解”的意思,DataAnnotation命名空间中包含一些用于验证Model的特性,如:RequiredAttribute,CompareAttribute,DisplayAttribute等,我们在创建Model时,将相应的特性性标注到字段上即可实现数据验证。

创建Model:

public class Person
{
    [Display(Name = "姓名")]
    [Required(ErrorMessage = "姓名是必须的!")]
    public string Name { set; get; }
    [Display(Name = "姓名")]
    public int Age { set; get; }
}

View中的代码:

@model EBuy.Website.Models.Person
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        <h3 style="color:red;">
            @Html.ValidationSummary()
        </h3>
    </div>
    <div>
        @using (Html.BeginForm("evaluate", "home", "Post"))
        {
            @Html.LabelFor(Model => Model.Name)
            @Html.TextBoxFor(Model => Model.Name)
            @Html.LabelFor(Model => Model.Age)
            @Html.TextBoxFor(Model => Model.Age)
            <input type="submit" value="提交" />
        }
    </div>
</body>
</html>

Controller中的代码:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Evaluate(Person person)
    {
        if (ModelState.IsValid)
        {
            return Content("evaluate success!");
        }
        return View("Index", person);
    }
}

运行程序:

注意,Age属性上并未标注RequiredAttribute,却依然提示Age字段必须,这是因为Age是int类型,int类型不能为null,对于不能为null的类型,ASP.NET MVC默认为是必须的

ValuationAttribute

除了使用DataAnnotation中预定义的一些特性进行数据验证外,我们还可以自定义一些验证特性。这里我们通过覆写DataAnnotation命名空间中ValudationAttribute类的IsValid方法来实现自定义验证。示例代码如下:

public class CheckAgeAttribute : ValidationAttribute
{
    private int _minage;
    public CheckAgeAttribute(int minAge)
    {
        _minage = minAge;
    }
    public override bool IsValid(object value)
    {
        if (value is int)
        {
            var age = value as int?;
            if (age == null)
            {
                return false;
            }
            if (age < _minage)
            {
                return false;
            }
            return true;
        }
        return false;
    }

    public override string FormatErrorMessage(string name)
    {
        return base.FormatErrorMessage(name);
    }
}

标注特性:

public class Person
{
    [Display(Name = "姓名")]
    [Required(ErrorMessage = "姓名是必须的!")]
    [MaxLength(4, ErrorMessage = "太长了")]
    public string Name { set; get; }
    [Display(Name = "年龄")]
    [CheckAge(18, ErrorMessage = "年纪太小!")]
    public int Age { set; get; }
}

然后运行程序:

IValidatableObject

通过实现IValidatableObject接口进行数据的验证,示例代码如下:

public class Person : IValidatableObject
{
    [Display(Name = "姓名")]
    public string Name { set; get; }
    [Display(Name = "年龄")]
    public int Age { set; get; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        Person person = validationContext.ObjectInstance as Person;
        if (person == null)
        {
            yield break;
        }
        if (string.IsNullOrEmpty(person.Name))
        {
            yield return new ValidationResult("您贵姓?");
        }
        if (person.Age < 18)
        {
            yield return new ValidationResult("太年轻了!");
        }
    }
}

运行程序:

IDataErrorInfo

实现IDataErrorInfo接口也可以进行数据的验证,示例代码如下:

public class Person : IDataErrorInfo
{
    [Display(Name = "姓名")]
    public string Name { set; get; }
    [Display(Name = "年龄")]
    public int Age { set; get; }

    public string this[string columnName]
    {
        get
        {
            switch (columnName)
            {
                case "Name":
                    if (string.IsNullOrEmpty(Name))
                    {
                        return "雁过留声,人过留名";
                    }
                    return null;
                case "Age":
                    if (Age < 18)
                    {
                        return "年纪尚轻!";
                    }
                    break;
            }
            return null;
        }
    }

    public string Error
    {
        get
        {
            return "出错啦!";
        }
    }
}

运行程序:

版权声明

本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接

如有问题, 请发送邮件和作者联系。

时间: 2024-10-27 17:39:39

ASP.NET MVC5中的Model验证的相关文章

ASP.NET MVC中对Model进行分步验证的解决方法

原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个Model的信息,但是又分页面填写信息的,当时我加上ModelState.IsValid这句验证代码的时候,根本没法通过验证,因为在注册的前面三步,注册用户的Model信息都没填写完整,而ModelState.IsValid是对一个实体的所有属性进行判断验证的.当时很纠结,因为刚接触Asp.net

ASP.NET MVC中使用FluentValidation验证实体

1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法. 2.安装FluentValidation FluentValidation地址:http://fluentvalidation.codeplex.com/ 使用Visual Studio的管理NuGet程序包安装FluentVa

ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败

在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加在Model里面.) 第一步:引用下面这个命名空间 第二步:添加验证 第三步:启动调试,出现以下问题: 解决方法: 超链接中包含了解决这个问题的详细介绍,也就是通过Code First数据库迁移的方式让Entity Framework帮助我们自动调整数据库里面的架构. 解决这个问题最简单的方法就是将

ASP.NET 登录中Cookies和验证和前端Jquery

1.登陆中的验证问题 登录中用户名和密码的判断,一是怎么判断,需要调用业务逻辑层的判断方法,这里是单独拿出一个层Controls来进行授权和登录的验证.那怎么进行验证结果的返回,正确进入下个页面错误返回登录页面,首先想到的放法写一个bool的方法,正确进入下一个页面,错误返回登录页面.这里用的一个比较专业的方法是在Controls设置一个数据返回接口类DataResult.cs里面定义好code,Message,Data分别用于进行登录验证,错误信息返回,数据返回(这里暂时用不到)至于为什么这样

在ASP.NET MVC5 中使用 FormsAuthenticationTicket 的注意事项

在根目录 web.confgi文件中添加如下配置信息. <configuration> <system.web> <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="2880" /> </authentication> </system.web> </configuration

在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView

背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5中创建GridView>中,我们学习了如何在 ASP.NET MVC 中实现 GridView,类似于 ASP.NET web 表单的功能.通过前文,我们已经了解到使用 jQuery 插件的数据表可以很容易地实现具有搜索.排序和分页等重要功能的表格. 前文中需要注意的是,所有通过插件实现的特性都是客户端的,这意味着所有的数据都首先在页面载入,然后由插件来处理客户端搜索.分页和排序的数据.如果数据表不是特别大,这么做是可以的:但是,如

Asp.net MVC5中Html.DropDownList的使用

一.静态下拉列表项的绑定 在下拉列表中绑定静态项,我们可以通过 SelectListItem 的集合作为数据源的下拉列表. 1 @Html.DropDownList("dropRoles", new List<SelectListItem>() 2 { 3 new SelectListItem() { Text= "Yes", Value = "true" }, 4 new SelectListItem() { Text= "

译:在ASP.NET MVC5中如何使用Apache log4net 类库来记录日志

译文出处:http://www.codeproject.com/Articles/823247/How-to-use-Apache-log-net-library-with-ASP-NET-MVC 在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法. 简介: 在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法.尤其在应用程序出错的时候,日志是我们最需要的文件.不管是在web,winform,windowsphone. 这里我们将一步一步讲解如何在ASP.NET MVC5应用程序中

ASP.NET MVC5中 log4net

在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法. 简介: 在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法.尤其在应用程序出错的时候,日志是我们最需要的文件.不管是在web,winform,windowsphone. 这里我们将一步一步讲解如何在ASP.NET MVC5应用程序中使用Apache log4net 框架来记录日志. 我用的是 Visual Studio Express 2013 和.NET framework 4.5. 第一步: 打开 Visual Studi