2011-06-24 4 views
2

Je travaille sur la mise en œuvre d'un écran de profil d'utilisateur personnalisé.asp.net mvc 3 et vue dynamique génération

Ceci est à peu près un écran typique de profil pour un utilisateur que vous trouverez sur la plupart des sites Web qui a une sorte d'élément d'adhésion.

Dans mon cas, puisque l'écran fait partie d'un produit de recherche sur le marché SAS, les points de données qui seront affichées sur le profil varient selon le produit d'études de marché. Le modérateur du produit précisera quels sont les points de données doivent être saisie en fournissant les informations suivantes:

Nom du champ, le nom d'affichage, type de champ (texte, numérique, RadioButton, case à cocher, etc.), nécessaire ...

Je suis bloqué en essayant de comprendre comment générer dynamiquement la vue MVC pour refléter la liste des points de données demandés. Je voudrais utiliser autant que possible le framework MVC sans avoir à écrire mon propre assistant pour générer le html. Je voudrais aussi utiliser la validation discrète si possible.

Je me Gotten confus quant à la meilleure approche est à ce point.

Est-ce que j'essaie d'utiliser:

  • un liant modèle personnalisé
  • génération de code pour générer une classe de modèle à l'exécution et le lier à la vue
  • simplement générer le code html

Existe-t-il une autre approche qui pourrait avoir plus de sens (modèles jQuery), des modèles d'éditeur, une série de vues partielles?

Répondre

0

Si vous n'êtes pas sûr de ce qui va être soumis au serveur pour une action donnée, vous pouvez faire en sorte que cette action prenne en paramètre un paramètre de type FormCollection, puis parcourir les champs. À ce stade, vous voudrez probablement gérer chaque type de champ au cas par cas, en utilisant le nom de ce champ comme clé.

Pour envoyer les articles à la vue, juste envelopper les données pour chaque champ dans une classe, quelque chose comme:

public class DataPoint 
{ 
    public string FieldName { get; set; } 
    public string DisplayName { get; set; } 
    public object Value { get; set; } 
} 

ont ensuite votre point de vue itérer vos DataPoint s. La méthode EditorFor() gère la vérification de type de Value pour produire le type d'entrée correct. La seule autre partie délicate ici est d'obtenir le FieldName comme le nom de cette entrée.

cours de construction que l'exécution va être une quantité excessive de travail pour quelque chose qui est pas trop compliqué en premier lieu. Une coutume ModelBinder ne vous aidera pas à moins que vous connaissiez le modèle que vous liez, qui est la racine de votre problème.

+0

J'ai déjà les points de données dans une classe similaire à ce que vous décrivez. J'essaye de comprendre comment rendre les points de données au HTML pour que je profite pleinement de la validation javascript discrète. J'ai toutes les mêmes informations collectées pour chaque point de données, comme si je devais générer un fichier de code de classe modèle et décorer les propriétés avec les attributs d'annotation de données. –

0

Pouvez-vous aller de l'avant et exposer votre point de vue avec tous les champs entre crochets par divs nommé alors dans votre rendu d'action ont le contrôleur ajouter une classe « cachée » définie comme

.hidden 
    { 
     display:none; 
    } 

à chacun des divs contenant un champ dont vous n'avez pas besoin?

L'autre choix est d'écrire une méthode d'extension HTML qui construit le point de vue dynamique.Vous pouvez créer des vues partielles pour chaque type de contrôle et, une par une, l'extension les insère dans HtmlString qui est rendu.