2009-05-06 4 views
3

Je construis ma première application MVC, après avoir suivi le tutoriel 'NerdDinner'. En créant une liste déroulante à partir d'une SelectList de la même manière, cependant, je rencontre un problème. Pour une raison quelconque, lorsque j'appelle la vue "Modifier", la liste déroulante ne montre pas la sélection correcte, même si les données sont définies autrement dans la base de données et la vue "Détails" affiche la valeur correcte. Tout vient juste avec la première valeur dans la liste.mvc - dropdownlist ne se remplit pas correctement dans la vue Edit

Je suis passé par le code NerdDinner morceau par morceau et ne peux pas pour la vie de moi voir une différence, mais cette application affichera correctement la liste déroulante avec la valeur actuelle lors de l'édition, et le mien ne fonctionne pas.

Quelqu'un a une suggestion d'où aller? Je peux poster des extraits de code si quelqu'un demande quelque chose de spécifique.

Mise à jour:

Dans un fieldset:

 <p> 
      <label for="Parking">Parking Arrangement:</label> 
      <%= Html.DropDownList("Parking", Model.Parking)%> 
      <%= Html.ValidationMessage("Parking", "*") %> 
     </p> 

L'action Edit:

// 
    // GET: /Buyer/Edit/2 
    public ActionResult Edit(int id) 
    { 
     Buyer_Profile buyer_profile = buyerRepository.GetBuyerProfileByID(id); 

     if (buyer_profile == null) 
      return View("NotFound"); 
     else if (!buyer_profile.IsOwnedBy(User.Identity.Name, id)) 
      return RedirectToAction("Index", "Home"); 
     else 
      return View(new BuyerFormViewModel(buyer_profile)); 
    } 

De la même manière qu'ils construisent pour l'exemple NerdDinner, j'ai créé un " ... FormViewModel ':

public class BuyerFormViewModel 
{ 
    // Properties 
    public Buyer_Profile Buyer_Profile { get; private set; } 
    public SelectList Parking { get; private set; } 

    // Constructor 
    public BuyerFormViewModel(Buyer_Profile buyer_profile) 
    { 
     Buyer_Profile = buyer_profile; 
     Parking = new SelectList(BuyerProfileOptions.Parking, Buyer_Profile.Parking); 
    } 
} 

Et le code HTML généré en cliquant sur « modifier » lorsqu'une valeur est déjà indiquée dans la vue détaillée et stockée dans le d/b:

<p> 
    <label for="Parking">Parking Arrangement:</label> 
    <select id="Parking" name="Parking"><option>No Preference</option> 
    <option>On Street</option> 
    <option>Assigned Street</option> 
    <option>Open Garage</option> 
    <option>Covered Garage</option> 
    </select>     
</p> 

Les champs de texte sous la même forme ont leurs valeurs correctement peuplées . C'est juste toutes les listes déroulantes qui ne le font pas!

Un grand merci pour votre attention.

+0

J'ai parcouru le débogueur étape par étape et au moment où il a fini de rendre la page, les bonnes choses semblent sortir. Mais ... ça ne marche pas. – user101306

+1

Pouvez-vous publier l'extrait de HtmlHelper et de l'action Edit. Et la sortie HTML aussi. –

Répondre

2

Huh. Il semble que htmlhelper est trop bon. J'ai enlevé les références au modèle et tout fonctionne!

à savoir

<%= Html.DropDownList("Parking", Model.Parking)%> 

devient

<%= Html.DropDownList("Parking")%> 

et nous sommes d'or. Est-ce que ViewData contient quelque chose appelé 'Parking' parce que je le référence dans le modèle afin qu'il écrase l'autre valeur ... ou quelque chose ...?

+0

Le deuxième paramètre de la liste déroulante est la valeur sélectionnée, vous avez probablement tapé fortement votre vue afin que le modèle soit votre modèle de vue, donc en faisant Modèle.Le parking de la propriété Parking est en fait votre objet selectlist .. où comme si vous faisiez model.Buyer_Profile.Parking qui pourrait aussi fonctionner. – Pricey

1

Conseil rapide pour les personnes - ne nommez pas les propriétés de votre modèle 'Titre' lorsqu'elles ont besoin d'une liste déroulante. Le cadre sera mélangé avec le titre de la vue et ne fonctionnera pas - j'ai passé une après-midi complète à m'arracher les cheveux. J'avais besoin de dormir dessus pour comprendre ce qui se passait.

Questions connexes