2012-06-19 2 views
1

J'ai donc une boucle for dans ma vue qui est censée restituer les zones de saisie. Maintenant, à l'intérieur de ces boîtes de saisie, je veux mettre des étiquettes qui disparaissent lorsque vous cliquez sur eux. C'est tout simple. Maintenant, il est probablement parce que mon cerveau a été câblé pour php premier, et il a été difficile de l'obtenir à penser en orientation lambdas et objet, mais je ne peux pas comprendre comment faire:MVC3 View For Initialisation des valeurs de boucle

@{ for (int i = 0; i < 3; i++) 
       { 
        <div class="editor-label grid_2">User</div> 
        Model.Users[i].UserFirstName = "First Name"; 
        Model.Users[i].UserLastName = "Last Name"; 
        Model.Users[i].UserEmailAddress = "Email Address"; 
       <div class="grid_10"> 
       @Html.TextBoxFor(m => Model.Users[i].UserFirstName, new { @class = "user-input" }) 
       @Html.TextBoxFor(m => Model.Users[i].UserLastName, new { @class = "user-input" }) 
       @Html.TextBoxFor(m => Model.Users[i].UserEmailAddress, new { @class = "user-input-long" }) 
       @Html.CheckBoxFor(m => Model.Users[i].IsUserAdmin) 
       <span>&nbsp;admin?</span> 
       </div> 
       <div class="clear"> 
       </div> 
       } 
      } 

et initialiser le valeurs pour les utilisateurs.

Et vous pensez probablement "Bien sûr que ça ne marchera pas, vous obtiendrez une Exception de Référence Nul", et vous auriez raison.

Je pourrais avoir besoin de les initialiser ailleurs et je ne le réalise pas mais je ne suis pas sûr. J'ai essayé la route [DefaultValue ("First Name")] et cela ne fonctionne pas.

Je pense probablement à ce problème, mais mon cerveau est déjà abattu d'essayer de comprendre comment câbler ces événements au contrôleur, donc toute aide serait appréciée!

Répondre

3

maintenant à l'intérieur de ces boîtes d'entrée que je veux mettre lables qui disparaissent lorsque vous cliquez sur les

Vous pouvez utiliser le HTML5 placeholder attribut:

@Html.TextBoxFor(
    m => m.Users[i].UserFirstName, 
    new { @class = "user-input", placeholder = "First Name" } 
) 

Et pour les anciens navigateurs qui font ne supporte pas cet attribut, utilisez javascript pour ajouter cette fonctionnalité. Voici un blog sur ce sujet: http://davidwalsh.name/html5-placeholder

Il y a aussi des exemples comment vous pouvez utiliser les métadonnées pour mettre en œuvre ce modèle directement à votre vue: https://stackoverflow.com/a/5824169/29407

+0

Merci, excellente réponse! Une solution plus simple semble toujours sauter et me mordre. J'ai fini par utiliser https://github.com/marcgg/Simple-Placeholder pour un support de navigateur rétrocompatible, car c'était facile et je connais déjà jQuery. Merci! – Ryan

Questions connexes