2010-02-13 2 views
8

Je crée une application asp.net mvc 2 générant dynamiquement mon modèle de vue en fonction des entrées de l'utilisateur. Autrement dit, l'utilisateur peut choisir les champs qu'il souhaite voir dans sa vue. Étant donné que les assistants basés sur des modèles dépendent fortement des propriétés et des attributs du modèle (annotations de données), il me faudrait ajouter les attributs au modèle de vue pendant l'exécution. Pas besoin de dire que ce n'est pas une tâche simple. Alors, que me conseillez-vous de faire dans ce scénario? Je ne suis pas capable d'ajouter les attributs statiquement, alors devrais-je aller de l'avant et essayer de les ajouter dynamiquement même si c'est beaucoup de travail ou devrais-je essayer d'utiliser une approche différente?ASP.NET MVC 2 Annotations de données dans un modèle généré dynamiquement

Merci d'avance!

Felipe

Répondre

3

Un classeur modèle personnalisé ne vous aiderait que dans la partie de liaison. Cela n'aidera pas avec les assistants basés sur des modèles ou d'autres fonctionnalités de ASP.NET MVC.

Je recommande d'écrire un fournisseur des métadonnées personnalisées place en héritant de ModelMetadataProvider et l'enregistrement de votre fournisseur dans global.asax en utilisant ModelMetadataProviders. Un fournisseur de métadonnées personnalisé peut obtenir ses métadonnées où bon lui semble: attributs CLR, fichier XML, base de données ou générateur de nombres aléatoires. Le fournisseur intégré d'annotations de données utilise bien entendu les attributs CLR.

Vous pouvez jeter un coup d'œil au code source du fournisseur de métadonnées Data Annotations intégré pour voir un exemple d'implémentation d'un fournisseur. Vous pouvez télécharger le code source ASP.NET MVC 2 RC 2 de the CodePlex site. Il pourrait également y avoir une implémentation dans le projet MVC Futures, mais je ne suis pas sûr.

+0

Merci beaucoup l'homme! –

0

Sons overkill (si je comprends bien) - qui est la création de modèles à la volée. Vous n'utilisez pas le principal avantage d'avoir des modèles; compiler les vérifications de temps. J'essaierais d'utiliser des objets spécifiques à la tâche (par exemple une classe UserForm qui aurait des classes List of UserFormFields et ainsi de suite) en main et de ne pas les créer à la volée.

Edit: Ce que je veux dire, est de ne pas utiliser la validation d'attributs et sur la conception de votre modèle avec la validation à l'esprit. Une conception comme ci-dessous pourrait mieux expliquer mon point:

interface IUserValidation 
{ 
    bool IsValid(); 
} 

class RequiredUserValidation : IUserValidation 
{ 
    public bool IsValid() 
    { 
     // .... 
    } 
} 

class UserFormField 
{ 
    List<IUserValidation> _validations; 

    public IEnumerable<ValidationResult> Validate() 
    { 
     // ... 
    } 
} 
+0

Voilà à peu près à quoi ressemble mon modèle. Une collection de champs contenant des données. Le problème est que je n'ai aucune information sur ces champs au moment de la compilation. J'ai besoin d'interroger la base de données et obtenir des informations à partir des champs et les remplir leurs attributs –

0

On dirait que vous auriez besoin d'un classeur de modèle de vue personnalisé qui applique dynamiquement la validation.

Questions connexes