Ich habe Probleme mit DropDownListFor
meiner MVC3-App. Ich konnte StackOverflow verwenden, um herauszufinden, wie sie in der Ansicht angezeigt werden können, aber jetzt weiß ich nicht, wie die Werte in den entsprechenden Eigenschaften des Ansichtsmodells erfasst werden sollen, wenn sie gesendet werden. Damit dies funktioniert, musste ich eine innere Klasse erstellen, die eine ID und eine Werteigenschaft hatte, und dann eine verwenden IEnumerable<Contrib>
, um die DropDownListFor
Parameteranforderungen zu erfüllen. Wie soll MVC FW nun den in dieser Dropdown-Liste ausgewählten Wert wieder der einfachen Zeichenfolgeeigenschaft in meinem Ansichtsmodell zuordnen?
public class MyViewModelClass
{
public class Contrib
{
public int ContribId { get; set; }
public string Value { get; set; }
}
public IEnumerable<Contrib> ContribTypeOptions =
new List<Contrib>
{
new Contrib {ContribId = 0, Value = "Payroll Deduction"},
new Contrib {ContribId = 1, Value = "Bill Me"}
};
[DisplayName("Contribution Type")]
public string ContribType { get; set; }
}
In meiner Ansicht platziere ich das Dropdown-Menü wie folgt auf der Seite:
<div class="editor-label">
@Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId,
new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>
Wenn ich das Formular abschicke, ContribType
ist das (natürlich) null.
Was ist der richtige Weg, um dies zu tun?
quelle
contribTypeOptions
beispielsweise ein neues Element hinzufügen, dasnew Contrib {ContribId = -1, Value = "Please Select"}
in der Dropdown-Liste angezeigt wird. Als Sie überprüfen können , obContribType
ist-1
dies bedeutet, dass Benutzer einen Wert ausgewählt haben@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
SelectList
). . Es ist der Wert der Eigenschaft (ContribType
), der bestimmt, was ausgewählt wird (so funktioniert die Modellbindung), und der Code sollte einfach sein.@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")
Können Sie bitte die Antwort bearbeiten, um sie zu korrigieren?Ich denke, das wird helfen: In Controller erhalten Sie die Listenelemente und den ausgewählten Wert
und in Ansicht
quelle
Zum Binden dynamischer Daten in eine DropDownList haben Sie folgende Möglichkeiten:
Erstellen Sie ViewBag in Controller wie unten
Verwenden Sie diesen Wert jetzt in der folgenden Ansicht:
quelle
Hier ist Wert das Objekt des Modells, in dem Sie Ihren ausgewählten Wert speichern möchten
quelle