2010-10-07 31 views
3

动态验证工作正常对MVC 2

[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从数据库填平,可以有几种类型,可以是string,number,dropdown等...有点像MailChimp字段属性:

alt text

是有办法做到这一点programmaticaly或者我需要建立一个jQuery插件来验证它,并停止使用使用验证的MVC2?

谢谢

回答

0

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

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

希望它有帮助!

+0

你好再次:)我只是想在它上面添加一些jQuery来验证使用类命名约定,因为我知道什么类型,如果它是必需的......这一切只是为了使用JavaScript,如在控制器我总是可以返回错误,只是想做正确的事情,并保存到服务器的往返旅程:) - **我会**看看这个项目。 – balexandre 2010-10-11 13:42:41

+0

那么...请让我更新这个!还可以看看这个jQuery插件:'http:// bassistance.de/jquery-plugins/jquery-plugin-validation /'。它与asp.net mvc无缝集成,是一个非常好的插件,可以帮助您满足您的需求... – Lorenzo 2010-10-11 14:18:33

1

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

事实上,它不是有利于添加任何属性,作为属性亲是你可以装饰你的类型与他们。当你在做一些动态的事情时,你最好有一些动态的方法来添加验证。