2014-10-27 2 views
12

in der Dropdown-Liste in mvc Ich erhalte immer diesen Fehler Es gibt kein ViewData-Element vom Typ 'IEnumerable' Land, das den Schlüssel hat zu sortieren, esEs gibt kein ViewData-Element vom Typ 'IEnumerable <SelectListItem>' mit dem Schlüsselland

Ansicht

@Html.DropDownList("country", 
    (IEnumerable<SelectListItem>)ViewBag.countrydrop,"Select country") 

-Controller

List<Companyregister> coun = new List<Companyregister>(); 
coun = ds.getcountry(); 

List<SelectListItem> item8 = new List<SelectListItem>(); 
foreach(var c in coun) 
{ 
    item8.Add(new SelectListItem 
    { 
     Text = c.country, 
     Value = c.countryid.ToString() 
    }); 
} 

ViewBag.countrydrop = item8; 
return View(); 

Ich weiß nicht, wo im falschen, kann mir jemand Dank im Voraus helfen

+0

Ich habe meinen Code aktualisiert. –

+3

Wenn Sie diesen Fehler erhalten, bedeutet dies, dass der Wert von 'ViewBag.couttrydrop' 'null' ist. Entweder wird der Code zum Auffüllen nicht ausgeführt, oder dies geschieht nur, wenn Sie die Ansicht zurückgeben und zurückgeben (und Sie haben 'ViewBag.countrydrop' nicht wieder aufgefüllt) –

+1

Und erwägen Sie, Ihren Code zu' ViewBag.countrydrop = new zu vereinfachen SelectList (coun, "countryid", "Land"); 'und' @ Html.DropDownList ("Land", (SelectList) ViewBag.countrydrop, ...) ' –

Antwort

11

In Ihrer Aktion ändern ViewBag.countrydrop = item8-ViewBag.country = item8; und in Ansicht wie folgt schreiben :

@Html.DropDownList("country", 
        (IEnumerable<SelectListItem>)ViewBag.country, 
        "Select country") 

Eigentlich wenn Sie schreiben

@ Html.DropDownList ("Land", (IEnumerable) ViewBag.country, "Land auswählen")

oder

Html.DropDownList ("Land", "Selec t Land)

sieht es in für IEnumerable<SelectListItem> in ViewBag mit Schlüssel Land, können Sie auch diese Überlastung in diesem Fall benutzen:

@Html.DropDownList("country","Select country") // it will look for ViewBag.country and populates dropdown 

Siehe Working DEMO Example

0

versuchen, diese

@Html.DropDownList("ddlcountry",(List<SelectListItem>)ViewBag.countrydrop,"Select country") 

Kontroller

ViewBag.countrydrop = ds.getcountry().Select(x => new SelectListItem { Text = x.country, Value = x.countryid.ToString() }).ToList(); 
+0

es nie auch gearbeitet –

+0

sind Sie in der Lage Länder in Ihrer Liste zu bekommen? –

+0

Breakpoint selbst ruft nie @ManishSharma –

1

Verwendung dieses

var list = new SelectList(countryList, "Id", "Name"); 
ViewBag.countries=list; 
@Html.DropDownList("countries",ViewBag.Roles as SelectList) 
2

Beachten Sie, dass eine Auswahlliste als null gebucht wird, daher beschwert sich Ihr Fehler, dass die viewdata-Eigenschaft nicht gefunden werden kann.

Initialisieren Sie Ihre Auswahlliste innerhalb einer POST-Aktion immer neu.

Zur weiteren Erläuterung: Persist SelectList in model on Post

8

Wenn Sie DropDownListFor wie diese wurden mit:

@Html.DropDownListFor(m => m.SelectedItemId, Model.MySelectList) 

wo MySelectList in dem Modell eine Eigenschaft vom Typ SelectList war, diese Fehler ausgelöst werden könnten, wenn die Eigenschaft ist null.

Vermeiden Sie dies, indem einfach es in Konstruktor initialisiert wird, wie folgt aus:

public MyModel() 
{ 
    MySelectList = new SelectList(new List<string>()); // empty list of anything... 
} 

Ich weiß, es ist nicht der Fall OP, aber dies könnte jemand wie mir helfen, die aufgrund dieser den gleichen Fehler hatte.

+0

Oder etwas in der Art: MySelectList = new List (); – Sanchitos

+1

Viel zu häufiges Szenario: Beim POST tritt ein Fehler auf, sodass Sie das Ansichtsmodell mit einem Fehler auf die Seite zurückgeben. Aber Sie haben die Liste , die im POST verloren gegangen sind, nicht aktualisiert - sie sind also null. Anstelle eines null-ref, erhalten Sie einen wirklich irreführenden Fehler von der Ansicht sagen, dass eine Eigenschaft nicht von einem bestimmten Typ ist, wenn Sie ganz genau wissen, dass es nicht von diesem Typ etc. – mmcrae

+0

@mmcrae genau sein soll, hatte ich dieses Problem ein paar von Zeiten mit POST-Aktion, wo ich vergessen habe, meine Dropdown-Elemente wieder zu füllen. – Alisson

0

Ich hatte das gleiche Problem und ich fand die Lösung, dass ich den Code zum Abrufen der Dropdown-Liste aus der Datenbank in der Methode bearbeiten sollte. Es hat für mich funktioniert. Solution for the similar problem

0

In meinem Fall der Fehler aufgetreten ist, weil ich in der Steuerung wie dies die Auswahlliste nicht initialisiert hatte:

viewModel.MySelectList = new List<System.Web.Mvc.SelectListItem>(); 

Da keiner der vorhandenen Antworten dies mir klar gemacht, poste ich dies. Vielleicht hilft es jedem.

Verwandte Themen