Seit 2 Tagen fest auf diesem ... hoffend, dass Sie helfen können.html.dropdownlistfor ausgewählten Wert nicht ausgewählt
Verwenden von VB.Net mit MVC4-Framework.
Ich habe eine Html.DropDownListFor in meiner Ansicht, die wie folgt aussieht:
@Html.DropDownListFor(Function(model) model.Title, New SelectList(Model.Titles, "Key", "Value"), "-select-", New With {.id = "titles", .class = "form-control"})
Model.Titles ist ein Dictionary (Of String, String), die so eine kurze Liste ist, dass ich es eher ziehen würde direkt von einer Funktion anstelle der Datenbank. Habe die Idee von hier Wörterbuch Liste zu verwenden:
Meine Funktion sieht wie folgt aus, die in meinem Modell als Model.Titles
Public Function getAgcRepTitles() As Dictionary(Of String, String)
Dim list As New Dictionary(Of String, String)
list.Add("A/D/SGT", "A/D/SGT")
list.Add("A/SGT", "A/SGT")
list.Add("CPL", "CPL")
list.Add("DET", "DET")
Return list
End Function
Alles funktioniert super gezogen wird, zeigt es die Liste und speichert den ausgewählten Wert in der Datenbank. Im Debug-Modus, wenn ich die DropDownListFor in der Ansicht erkunde, kann ich sehen, dass Model.Title den richtigen Wert aus der Datenbank abgerufen hat (zB "DET"), und ich kann sehen, dass Model.Titles die obige Liste von meinem enthält Funktion. Aber so sehr ich es auch versuche, ich kann DropDownListFor nicht dazu bringen, Model.Title aus der Liste anzuzeigen.
Das Select-Element im HTML nicht über eine ausgewählte Option, aber ansonsten sieht gut aus:
<select name="Title" class="form-control">
<option value="">-select-</option>
<option value="A/D/SGT">A/D/SGT</option>
<option value="A/SGT">A/SGT</option>
<option value="CPL">CPL</option>
<option value="DET">DET</option>
</select>
Ich habe versucht, auf die SelectedValue des Select in der Ansicht des Model.Title Wert hinzufügen. Ich habe versucht, eine Liste von SelectListItems anstelle von Dictionary zu verwenden und über Viewbag.myTitles an die View zu senden. Ich habe versucht, Ganzzahlen für die Schlüsselwerte (0,1,2,3 ...) zu verwenden. Nichts funktioniert.
Ich sollte auch hinzufügen, dass ich eine andere DropDownListFor in der gleichen Ansicht, die perfekt funktioniert. Wenn Sie sie vergleichen .... zieht diese ihre Liste aus der Datenbank als SelectListItems in eine SelectList (die Value und Text anstelle von Key und Value verwendet), wobei der Wert eine Ganzzahl ist, die bei Null beginnt und der Text eine Zeichenkette ist .
Wirklich hämmerte mein Kopf mit diesem.
BEARBEITEN: Weitere Informationen. Wenn ich das Formular abschicke, werden die geänderten Daten erfolgreich in die Datenbank hochgeladen, und der Controller sendet die Modelldaten an die Ansicht zurück. Okay .... in DIESER Ansicht die DropDownListFor funktioniert !!! Aber dann klicke ich auf Aktualisieren, und ich verliere meinen ausgewählten Wert von DropDownListFor (obwohl meine Modelldaten IDENTISCH sind).
Hier ist mein Controller:
<AllowAnonymous()> _
Function Update() As ActionResult
If WebSecurity.IsAuthenticated Then
Dim user = db.AgcRepProfile.Where(Function(AgcRep) AgcRep.Email = WebSecurity.CurrentUserName).ToList
If user.Count = 1 Then
Dim getAgencies = db.AgencyProfile.Where(Function(Agency) Agency.Active = True).OrderBy(Function(Agency) Agency.Name).ToList
ViewBag.myAgencies = New SelectList(getAgencies, "AgcId", "Name")
user(0).Titles = New myLists().getAgcRepTitles
ViewData("success") = ""
Return View(user(0))
End If
End If
Return RedirectToAction("index", "home")
End Function
<HttpPost()> _
<ValidateAntiForgeryToken()> _
Function Update(agcrep As AgcRep) As ActionResult
If ModelState.IsValid And WebSecurity.IsAuthenticated Then
db.Entry(agcrep).State = EntityState.Modified
db.SaveChanges()
Dim agencies = db.AgencyProfile.Where(Function(Agency) Agency.Active = True).OrderBy(Function(Agency) Agency.Name).ToList
ViewBag.myAgencies = New SelectList(agencies, "AgcId", "Name", agcrep.AgcId.ToString)
agcrep.Titles = New myLists().getAgcRepTitles
ViewData("success") = "changes have been saved"
Else
ViewData("success") = "Update failed. Please try again."
End If
Return View(agcrep)
End Function
übergibt Sie Ihren Titel in den letzten Parameter der neuen SelectList-Hilfe? h. 'Neue Auswahlliste (Modell.Titel," Schlüssel "," Wert ", Modell).Titel) ' –
Leider nicht – Pickle
Sind Sie sicher, dass der Wert von' Title' genau mit einem der Optionswerte übereinstimmt (Groß-/Kleinschreibung, kein Leerzeichen usw.)? Der Code, den Sie angezeigt haben, funktioniert einwandfrei. –