2009-07-30 4 views
1

Ich habe den folgenden Code, der ein Dropdown mit einer Reihe von ganzzahligen Werten bevölkern soll und den aktuell ausgewählten Wert (in diesem Fall 13) das ausgewählte Element sein soll.SelectedItem nicht in SelectList in ASPNET.MVC

Ich habe die gleiche Technik, aber für String-Werte und es funktioniert super, erinnere mich jedes Mal, wenn ich zu der Ansicht, was der aktuelle Wert ist.

In Controller:

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 

ViewData["Field"] = new SelectList(x, 13); 

In Ansicht:

<%=Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Field"])%> 

Wenn ich das Viewdata debuggen und beobachten [ "Field"] Objekt, hat es eine selectedValue von 13 haben und so muss es sein die Ansicht erreichen, aber ignoriert werden, da alles, was ich auf der Seite sehe, ein Dropdown mit den Werten 1 bis 15 ist, aber mit 1 (keine ausgewählt, so zeigt die erste)

Ist das ein Fehler oder mache ich s etwas wirklich dumm?

Dank

Graeme

Antwort

4

Ich glaube mich zu erinnern, dass es nicht wirklich die Selected-Eigenschaft des Selectelement zu verwenden ist. Normalerweise habe ich ein ViewData-Objekt als Auswahlliste und ein anderes als den ausgewählten Wert.

Controller:

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 
ViewData["Fields"] = new SelectList(x); 
ViewData["Field"] = 13; 

Ansicht

<%= Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Fields"]) %> 
+0

Spot auf - danke! Gott weiß, warum das ist anders als die String-Version, aber Ihre Lösung funktioniert ein Vergnügen! Vielen Dank!! – Graeme

+0

Dies ist der richtige Weg zu gehen. Der erste Parameter ist der Feldname, an den der Wert angehängt wird. Dieser unterscheidet sich von dem Mechanismus, mit dem Sie die selectlistitem-Daten übergeben. Wenn Sie den gleichen Schlüssel verwenden, tun Sie doppelte Arbeit mit ein paar Daten, und das funktioniert nicht so gut. Ich bin jedoch ziemlich sicher, dass es die ausgewählte Eigenschaft verwenden wird, wenn es festgelegt ist. Dies wird es jedoch nicht einstellen. – Mallioch

+0

Ich muss mich an eine frühere Version des Codes erinnern. Ich habe es nur überprüft und es verwendet die Selected-Eigenschaft, aber es gibt einige Bedingungen, unter denen es die ausgewählte Eigenschaft des Elements zurückgesetzt wird, abhängig davon, ob es die Daten aus der Ansicht abruft oder nicht. Ich werde einige Nachforschungen darüber anstellen müssen, ob dies immer noch der beste Weg ist, Drop-Downs zu handhaben oder nicht. – tvanfosson

0

Dies geschieht mit mir war! Ich zog mir stundenlang die Haare aus, aber ich fand es schließlich heraus. In meinem Fall war ich die Schaffung einer Dropdown-Liste wie folgt aus:

<%= Html.DropDownList("bookId", Model.ProductMenu, new { onchange = "goToBook();" })%> 

Und es wurde die ausgewählte Option nicht gedruckt wird. Aber die Drop-Down-direkt daneben funktioniert gut:

<%= Html.DropDownList("segmentIndex", Model.SegmentMenu, new { onchange = "goToSegment();" })%> 

Sie wurden die in der Steuerung genau die gleiche Art und Weise erzeugt werden, und der Debugger würde immer den richtig ausgewählten Wert als die Ansicht zurückgegeben wurde. Also was zum Teufel?

Der Unterschied war in der Ansicht selbst. "bookId" in meiner App ist zufällig ein route/querystring-Wert und segmentIndex nicht. Einfach den Namen "bookId" in der Ansicht zu "bookIdBLAH" ändern, es wurde behoben!