3

工作正常

 [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动态创建的呢?例如,后端的订阅字段可以由用户创建并最终如下所示:

替代文字

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

目前我正在做:

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 字段属性:

替代文字

有没有办法以编程方式执行此操作,或者我需要创建一个 jQuery 插件来验证它并停止使用 MVC2 的使用验证?

谢谢

4

2 回答 2

1

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

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

于 2010-10-13T08:28:39.713 回答
0

我不认为你可以使用数据注释属性来做到这一点。

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

希望能帮助到你!

于 2010-10-11T13:06:31.097 回答