MVC 2的动态验证

时间:2010-10-07 15:44:56

标签: asp.net-mvc-2 asp.net-mvc-validation

可以正常使用

 [MetadataType(typeof(Area_Validation))]
 public partial class Area
 {
    ...
 }

 public class Area_Validation
 {
 [Required(ErrorMessage = "Please add this field.")] 
 public int Email { get; set; }

 [Required(ErrorMessage = "Please add this field")]
 public string Name { get; set; }
 }

但如果Area_Validation 动态创建怎么样?例如,后端的订阅字段可以由用户创建,最终如下:

alt text

如何在自动验证的每个字段上设置元数据

目前我在做:

public class SubscriberFormViewModel
{
    public List<SubscriberFieldModel> Fields { get; private set; }
    public Calendar Calendar { get; private set; }
    public Company Company { get; private set; }

    public SubscriberFormViewModel()
    { 
        // TODO: This is only for testing while validation is not set
    }
    public SubscriberFormViewModel(Decimal calendarId)
    {
        if (calendarId > 0)
        {
            SubscribersRepository db = new SubscribersRepository();

            Calendar calendar = db.GetCalendarById(calendarId);
            Company company = db.GetCompanyById(calendar.company_id);

            this.Fields = db.FindAllSubscriberFieldsByCalendar(calendarId);
            this.Calendar = calendar;
            this.Company = company;
        }
        else
            this.Fields = new List<SubscriberFieldModel>();
    }
}

我想在所有Fields属性中设置元数据

换句话说,这个Fields已从数据库中填充,可以有多种类型,可以是stringnumberdropdown等等...有点像MailChimp Fields Properties:

alt text

有没有办法做这个programmaticaly 或者我需要创建一个jQuery插件来验证它并停止使用MVC2中的使用验证?

谢谢

2 个答案:

答案 0 :(得分:1)

实际上,您可以制作多种验证方案,每种类型一种(如果需要,每种类型更多)。然后在类型创建上添加此验证规则。当您需要验证时,您可以调用模板验证方法,该方法将检查这些规则是否 - 将向ModelState添加错误,您将能够在前端显示。

实际上,添加任何属性并不是有利可图的,因为属性pro是你可以用它们来装饰你的类型。当你做一些动态的事情时,你最好有一些动态的方法来添加验证。

答案 1 :(得分:0)

我不认为你可以使用Data Annotations属性来做到这一点。

Codeplex中有一个名为Fluent Validation的项目,允许您使用.Net代码以流畅的方式添加验证规则。我从来没有使用过该项目,但似乎可以通过动态创建的对象帮助您。

希望它有所帮助!