2013-10-24 10 views
15

Ich habe ein Problem, wo der ausgewählte Wert ist nicht für die Html.DropDownList Hilfsmethode arbeitet Siehe unten:.Html.DropDownList gewählter Wert nicht funktioniert (mit Constructor mit IEnumberable <SelectListItem>

Dies ist mein Controller:

public ActionResult Edit(int id = 0) 
{ 
    NewsEvent item = GetItem(id); 
    ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); 

    return View(item); 
} 

das ist meine Ansicht:

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
          new { @class = "form-control" }) 

Allerdings, wenn ich die unten in nach Ansicht versuchen, funktioniert es:

@Html.DropDownList("NewsItemId", string.Empty) 

Das Folgende funktioniert auch, aber da der Feldname nicht mit dem Modell übereinstimmt, wird es nicht korrekt posten.

Der Grund, warum ich die erste Option verwenden muss, ist, damit ich das Klassenattribut zum Steuerelement hinzufügen kann.

Könnte jemand mir helfen zu verstehen, was ich falsch mache?

+0

möglich duplicate von [DropDownListFor Not Selecting Value] (http://StackOverflow.com/questions/2278056/dropdownlistfor-not-selecting-value) – freshbm

Antwort

40

Sie haben das gleiche Problem hier:

DropDownListFor Not Selecting Value

Problem in Ihrem ViewBag Eigenschaftsname ist. Weil es dasselbe ist wie Ihre Eigenschaft in Model, wird es nicht funktionieren. Sie sollten nur Namen Ihres ViewBag prop zu etwas ändern anderes, wie:

ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); 

und auf anzeigen

@Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.Empty, 
          new { @class = "form-control" }) 
+0

Vielen Dank, machte die Änderung und es hat funktioniert. –

+1

hatte das gleiche Problem hier. Danke – rikket

+1

Dieser Bug ist böse. Ein guter Grund, ViewBags und View Dictionaries nicht zu verwenden. Ist das ein Fehler mit .NET 4.5? Es könnte bei einem Upgrade kaputt gegangen sein ...? – Jess

1

Zuerst, wie bevölkern Sie ViewBag.NewsItemId.Items? Wir sehen nicht, woher die Werte kommen.

Damit ein ausgewählter Wert funktioniert, muss er vom selben Typ sein wie die Elemente Ihrer Sammlungen. Wenn item.NewsItemId vom Typ T ist, muss ViewBag.NewsItemId.Items vom Typ IEnumerable<T> (oder einem anderen Sammlertyp, der es implementiert) sein. Es scheint nicht der Fall zu sein, da Sie NewsItemId als den ausgewählten Wert festgelegt haben, während Ihre Auflistung auf NewsItemId.Items basiert, die möglicherweise nicht von demselben Typ sind.

2

ich die Tatsache nicht mochte, dass Sie

@Html.DropDownList("NewsItemID") 

verwenden können, und Es klappt. Dann müssen Sie das Attribut 'class' hinzufügen und es bricht plötzlich. Ich sah einen Ort zu arbeiten und andere nicht funktioniert die Syntax

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
         new { @class = "form-control" }) 

mit Als ich das recherchiert, stellte ich fest, das ViewBag.NewsItemId tatsächlich eine Null in der Ansicht war.So eine Arbeits Syntax, mit dem Modell und ViewBag Felder den gleichen Namen

@Html.DropDownList("NewsItemId", null, string.Empty, 
         new { @class = "form-control" }) 
2

Ich habe versucht, viele Sachen ist, die aber schließlich bekam arbeitet es wie diese

In Controller

int valittu_tila = 1; 
var tapahtumantilat = new List<SelectListItem>(); 

tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" }); 
tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"}); 
tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"}); 

ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila); 

Und dann In der Ansicht habe ich nur (ich habe das Onchange-Event und die Klasse für Drop-down hier auch, aber Sie können diese entfernen, wenn Sie möchten).

@Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" }) 

(Tut mir leid, finnisch in den Textwerten und Variablennamen, aber die sollten keine Rolle: D)

0

Sie sollten den Namen des Feldes Ihrer Dropdownlist ändern:

@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" }) 
0

Ändern Sie den Namen der Viewbag-Eigenschaft in einen anderen Namen als den Modellvariablennamen, der auf Seite verwendet wird.

+0

Könnten Sie mehr Details zur Verfügung stellen, wie dies das Problem behebt? – Graham

0
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
    new { @class = "form-control" }) 

Änderung

@Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty, 
    new { @class = "form-control" }) 

ViewBag.NewsItemIdList Namen geändert. auch im Controller ändern.