使用实体框架poco的基于不同用户角色的MVC4数据注释验证

时间:2013-01-14 15:51:40

标签: c# entity-framework validation asp.net-mvc-4 data-annotations

我正在开发一个包含大约90种不同形式的复杂应用程序(是的,真棒)。如何根据一些要求进行复杂的现场验证:

1)字段要求基于用户登录(角色) 2)如果其他数据字段的回答不同(动态),则字段要求会发生变化

如何使用EF5 POCO在MVC4中完成?

我目前为必填字段创建了数据注释,如下所示:

我的EF5 POCO模型

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

[MetadataType(typeof(User_Validation))]
public partial class User
{    
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
}

ValidationModels.cs文件位于我的EF5 POCO

    public class User_Validation
    {    
        public int UserID { get; set; }

        [Required(ErrorMessage = "The UserName is required")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "The FirstName is required")]
        public string FirstName { get; set; }

        [Required(ErrorMessage = "The LastName is required")]
        [Display(Name="Last Name")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "The Password is required")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required(ErrorMessage = "The Email is required")]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }
    }

这很好用,但我怎样才能使我的验证变得动态?

谢谢!

1 个答案:

答案 0 :(得分:1)

您是否需要管理员为响应设置动态要求,或者从一开始它们是否相当静态?

如果我是你,我会为每个触发的响应创建不同的操作方法。这将允许您将表单指定为部分视图,并根据输入逻辑进行渲染。

如果您需要自定义字段验证,建议您编写自己的数据验证框架。您可以从ActionFilterAttribute继承,它允许您在每个操作请求/响应周期之前和之后添加自定义验证。在这里查看一些信息Custom Filters in MVC

此外,我将为客户端验证引入自定义jquery验证框架,以便同一表单没有多个回发,然后在动态生成下一个表单之前自定义服务器端验证。有关信息,请查看此博客的框架:Jquery - Custom Validation

请记住,您不希望在数据存储和视图之间进行大量聊天,因此我会将尽可能多的配置存储在经过深思熟虑的缓存实现中。

我希望这会有所帮助。