2011-09-28 2 views
3

J'ai une page d'enregistrement qui demande des données à l'utilisateur, par ex. adresse e-mail. Les administrateurs devraient être en mesure de personnaliser le formulaire. Par exemple, il peut être intéressé par le lieu de naissance de l'utilisateur, auquel cas une zone de texte supplémentaire devrait apparaître dans le formulaire d'inscription. Parce que les champs dans le formulaire sont si dynamiques, je ne peux pas les ajouter en tant que propriétés au modèle de vue.Ajout dynamique de contrôles d'entrée avec des validateurs à une vue

Comment puis-je ajouter des contrôles d'entrée et des validateurs à la vue lors de l'exécution?

+0

[Modèle ASP.Net MVC Editor pour les données/formulaires de vue dynamique] (http://stackoverflow.com/questions/7403799/asp-net-mvc-editor-template-for-dynamic-view-data-forms) – Sjoerd

+0

[ASP.NET MVC personnalisé ModelMetadataProvider et ModelValidatorProvider] (http://stackoverflow.com/questions/4602339/asp-net-mvc-custom-modelmetadataprovider-and-modelvalidatorprovider) – Sjoerd

+0

[Modèles dynamiques ASP.NET MVC 3 utilisant le compilateur Mono en tant que service] (http://weblogs.asp.net/jgalloway/archive/2011/05/26/dynamic-asp-net-mvc-3-models-using-mono-s-compiler-as-a-service .aspx) – Sjoerd

Répondre

1

Vous pouvez créer une classe de modèle pour votre formulaire dynamique à l'aide d'une collection. Par exemple:

public class MyParam { 
    public string Name {get; set;} 
    public string Value{get; set;} 
} 

public class MyDynamicForm { 
    public List<MyParam> parameters {get; set;} 
} 

Que vous pouvez créer une vue qui génère le formulaire en utilisant une boucle sur les paramètres. Pour valider les paramètres d'entrée, vous devez développer une méthode de validation qui reçoit en entrée le FormCollection et valider chaque paramètre par Name.

0

J'ai résolu ce dans ce qui suit de manière moins qu'optimale:

À mon avis, je boucle à travers mes attributs personnalisés et appeler une méthode d'extension sur le HtmlHelper pour rendre le Html:

foreach (var attribute in group.Attributes) 
{ 
<tr> 
    <td> 
     @attribute.Name 
    </td> 
    <td> 
     @Html.ValidationMessage(attribute.Id) 
     @Html.AttributeEditor(attribute) 
    </td> 
</tr> 
} 

Dans la méthode AttributeEditor(), je mis la validation Javascript discret attributs pour activer la validation côté client:

if (IsRequired) 
    { 
     attributes["data-val-required"] = MvcCompaniesResources.UserProfileValidatorMessages.RequiredField; 
     attributes["data-val"] = "true"; 
    } 

Cela donne la validation côté client, un d fonctionne bien avec @Html.ValidationMessage(). Cependant, je devrais encore implémenter la validation côté serveur séparément.

Questions connexes