Ich habe eine DropDownList mit einer SelectList gefüllt von einem anonymen Typ gefüllt, die zwei Eigenschaften "CountryId" (int) und "Description" (string) hat. Ich möchte, dass das ausgewählte Land in der Liste das Standardland ist.DropDownList SelectedValue nicht ordnungsgemäß binden
wo "Länder" ist ein IQueryable von anonymen Typen aus einer Linq-Abfrage. Die Länder ist eine öffentliche Eigenschaft auf einen Blick Modell:
public class CountryBaseViewModel
{
public SelectList Countries { get; set; }
public Contact Contact { get;set; }
....
}
Das HTML sieht wie folgt aus:
<p>
<label for="CountryId">Home Country:</label>
<%= Html.DropDownList("CountryId", Model.Countries)%>
</p>
Das ist in Ordnung und wenn ich die Seite zu laden, wird das richtige Land ausgewählt.
Aber wenn ich die Änderung an der Edit-Methode auf dem Controller übermitteln, scheint die Bindung fehlzuschlagen.
Zum Beispiel, wenn ich den folgenden HTML verwenden
<p>
<label for="Contact.Job">Job/Post:</label>
<%= Html.TextBox("Contact.Job", Model.Contact.Job) %>
</p>
Und ich rufe die Methode
public ActionResult Create(Contact contact)
auf dem Controller, dann wird der Wert contact.Job korrekt aus dem Text gefüllt ist aber die CountryId ist nicht.
Ich nehme an MVC verwendet den "Contact.Job" (TextBox 1st) Parameter, um dies zu setzen. Aber der erste Parameter der DropDownList ist "CountryId" und nicht "Contact.CountryId", denn wenn dies der Fall ist, wird der ausgewählte Wert nicht in der Liste angezeigt, wenn ich ihn lade.
Es sieht so aus, als ob der erste Parameter von TextBox für Datenbindung ist und der erste Parameter von DropDownList ist, das ausgewählte Element zu finden.
Wie verwende ich diese Art der Datenbindung, um den gewünschten Wert in der DropDownList zu erhalten und dann an Model.Contact.Country zu binden?