2009-05-06 7 views
3

Ich baue meine erste MVC-Anwendung, nachdem ich das "NerdDinner" -Tutorial durchgegangen bin. Wenn ich auf dieselbe Weise eine Dropdown-Liste aus einer SelectList erstelle, stoße ich jedoch auf ein Problem.mvc - dropdownlist füllt nicht korrekt innerhalb der Bearbeitungsansicht

Aus irgendeinem Grund, wenn ich die 'Bearbeiten' Ansicht aufrufen, zeigt die Dropdown-Liste nicht die richtige Auswahl, obwohl die Daten sonst in der Datenbank eingestellt sind und die 'Details' Ansicht zeigt den richtigen Wert. Jeder kommt gerade mit dem ersten Wert in der Liste auf.

Ich habe den NerdDinner-Code Stück für Stück durchgelesen und kann für das Leben von mir keinen Unterschied sehen, aber diese Anwendung wird das Dropdown mit dem aktuellen Wert beim Bearbeiten korrekt anzeigen, und meins nicht.

Hat jemand einen Vorschlag, wo man von hier aus gehen kann? Ich kann Code-Snippets posten, wenn jemand nach etwas Bestimmtem fragt.

Update:

Innerhalb eines fieldset:

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

Aktion bearbeiten:

// 
    // 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)); 
    } 

In der gleichen Art, wie sie es für die NerdDinner Beispiel konstruieren, habe ich eine ' ... 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); 
    } 
} 

Und das erzeugte HTML, wenn sie auf ‚Bearbeiten‘ klicken, wenn bereits ein Wert in die Details dargestellt sehen und in der d/b gespeichert:

<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> 

Die Textfelder in der gleichen Form haben ihre Werte bevölkert korrekt . Es sind nur die Drop-Downs, die das nicht tun!

Vielen Dank für Ihre Aufmerksamkeit.

+0

Ich habe mit dem Debugger Schritt für Schritt durch und bis zum Ende der Rendering der Seite die richtigen Dinge sieht aus wie es herauskommen wird. Aber ... einfach nicht. – user101306

+1

Können Sie das Snippet des HtmlHelper und der Edit-Aktion posten. Und die HTML-Ausgabe auch. –

Antwort

2

Huh. Es scheint, dass htmlhelper zu gut ist. Ich habe die Referenzen zum Modell entfernt und alles funktioniert!

heißt

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

wird

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

und wir sind golden. Ist es so, dass ViewData etwas namens "Parken" enthält, weil ich es im Modell referenziere, so dass es den anderen Wert ... oder etwas ... quetscht?

+0

Der zweite Parameter für die Dropdown-Liste ist der ausgewählte Wert. Sie haben Ihre Ansicht wahrscheinlich stark typisiert, sodass das Modell Ihr Ansichtsmodell ist, also Modell.Parken der Parking-Immobilie ist eigentlich Ihre Auswahlliste Objekt .. wo, als ob Sie Model.Buyer_Profile.Parking das könnte auch funktionieren. – Pricey

1

Kurzer Tipp für Menschen - Benennen Sie keine Ihrer Modelleigenschaften, Titel ', wenn sie eine Dropdown-Liste benötigen. Der Rahmen wird mit dem View-Titel verwechselt und wird nicht funktionieren - ich habe einen ganzen Nachmittag damit verbracht, mir die Haare auszureißen. Brauchte, darauf zu schlafen, um zu erkennen, was vor sich ging.

Verwandte Themen