2009-06-05 5 views
0

Je suis un peu coincé sur un problème MVC.C# MVC: Affichage avec ViewModel en option (les données ne sont pas toujours présentes/nécessaires)

J'ai une vue d'inscription, atteint par www.example.com/register, quelque chose comme ceci:

<form id="registrationform" method="post"> 
<fieldset> 
    <label for="emailaddress">Email</label> 
    <input id="emailaddress" name="emailaddress" type="text" /> 
    //more inputs etc. 
</fieldset> 
</form>  

Maintenant, je permettre aux gens d'inviter d'autres, donc je vérifie dans le registre mon contrôleur méthode pour un paramètre d'invitation (www.example.com/register?invite=1234). Si le paramètre d'invitation n'est pas vide, je recherche dans ma base de données pour obtenir l'utilisateur "invité" associé. Tout fonctionne bien.

Maintenant le problème: Je veux préremplir mes entrées avec les données de la base de données. J'ai déjà les données, je ne connais pas la meilleure façon de les mettre dans la vue MVC, et de désactiver les entrées qui sont déjà remplies.

ViewModel? Gardez à l'esprit que j'ai besoin de la vue régulièrement vide (je ne veux pas utiliser des vues différentes, cela violerait DRY).

Merci :)

Répondre

2

Dans votre modèle Voir:

public class RegistrationViewModel 
{ 
    public bool Invited; 

    /* 
    * Fields for prepopulating inputs 
    */ 
} 

Dans votre vue:

<%= Html.TextBox("email", null, Model.Invited ? new { @readonly = "readonly"} : null) %> 

ou

<%= Html.TextBox("email", null, Model.Invited ? new { @disabled = "disabled"} : null) %> 
+0

Y at-il impact sur les performances à l'aide Html.TextBox au lieu d'écrire directement Alex

+0

Absolument NON. Utilisez Html.Textbox là où c'est possible –

+0

Quels sont les avantages de Html. * Par rapport à l'équivalent tag direct? J'essaie juste de comprendre le raisonnement. Merci :) – Alex

3

Je vous suggère de créer un ViewModel et que votre vue soit totalement ignorant du fait que les données sont ou ne vient pas prérempli de la DB du tout.

Si vous données Préremplissage .. puis remplir votre ViewModel les données nécessaires (et désactiver les entrées qui viennent prérempli)

Si vous commencez à partir de zéro .. puis remplissez votre ViewModel avec vide/données par défaut De toute façon, toute votre vue est l'affichage du formulaire, et remplir les données par défaut sur les différentes zones de texte et d'autres entrées basées sur le passé dans ViewModel.

Questions connexes