2010-10-07 9 views
3

Ce fonctionne très bienvalidation dynamique sur 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; } 
} 

mais que diriez-vous siArea_Validation est dynamiquement créé? par exemple abonnement Les champs que le back-end peut être créé par l'utilisateur et finissent comme ceci:

alt text

Comment définir les métadonnées sur chaque champ pour validation automatique?

Actuellement, je fais:

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>(); 
    } 
} 

et je veux régler le des métadonnées dans tous Fields biens

En d'autres termes, cette Fields sont remplis de la base de données et peut avoir plusieurs types, peut être un string, number, dropdown, etc ... un peu comme les champs MailChimp Propriétés:

alt text

est-il un moyen de le faire programmaticaly ou je dois créer un plugin jQuery pour le valider et cesser d'utiliser la validation de l'utilisation de MVC2?

Merci

Répondre

0

Je ne pense pas que vous pouvez le faire en utilisant les attributs Annotations données.

Il existe un projet dans Codeplex, appelé Fluent Validation, qui vous permet d'ajouter des règles de validation de manière fluide en utilisant le code .Net. Je n'ai jamais utilisé ce projet, mais il semble que peut-être peut vous aider dans votre cas avec des objets créés dynamiquement.

J'espère que ça aide!

+0

encore une fois :) Je pensais juste ajouter quelques jQuery dessus pour valider en utilisant une convention de nommage de classe, car je sais ce que le type et si c'est nécessaire ... Tout simplement pour le faire en utilisant javascript, comme dans le contrôleur je peux toujours retourner l'erreur, je voulais juste faire les choses correctement et enregistrer un aller-retour au serveur :) - ** Je vais ** jeter un oeil à ce projet. – balexandre

+0

Eh bien ... s'il vous plaît tenez-moi au courant de cela! Jetez aussi un oeil à ce plugin jQuery: 'http: // bassistance.de/jquery-plugins/jquery-plugin-validation /'. Il s'intègre parfaitement avec asp.net mvc et est un très bon plugin qui peut vous aider avec vos besoins ... – Lorenzo

1

En fait, vous pouvez faire plusieurs scénarios de validation, un par type (ou plus par type si vous en avez besoin). Ajoutez ensuite ces règles de validation à la création du type. Lorsque vous avez besoin de valider, vous pouvez appeler la méthode de validation de modèle, qui va vérifier si ces règles et sinon - va ajouter des erreurs à ModelState, que vous serez en mesure de montrer sur le front-end.

En fait ce n'est pas rentable d'ajouter des attributs, car les attributs pro est que vous pouvez décorer votre type avec eux. Lorsque vous faites des choses dynamiques, il vaut mieux avoir une manière dynamique d'ajouter une validation.

Questions connexes