2013-05-07 8 views
6

Mam model:błąd MVC 4 DropDownListFor - Nie ma pozycja ViewData typu 'IEnumerable <SelectListItem>', który ma klucz

public class Auction 
{ 
    public string Title { get; set; } 
    public string category { get; set; } 
} 

i sterownik:

[HttpGet] 
public ActionResult UserForm() 
{ 

    var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" }); 
    ViewBag.categoryList = categoryList; 
    return View(); 

} 

W Zobacz mam te linie:

<div class="editor-field"> 
    @Html.DropDownListFor(model => 
     model.category,(SelectList)ViewBag.categoryList) 
    @Html.ValidationMessageFor(model => model.category) 

</div> 

błąd pojawia się, gdy próbuję zapisać formularz jest:

Brak elementu ViewData typu "IEnumerable", który ma klucz "kategoria". Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania WWW. Zapoznaj się ze stosem stosu , aby uzyskać więcej informacji o błędzie i skąd pochodzi w kodzie.

Szczegóły wyjątku: Wyjątek System.InvalidOperationException: Brak elementu ViewData typu "IEnumerable" o kluczu "kategoria".

ja nie rozumiem, co jest problemem, ponieważ zrobiłem (lub próbował zrobić) wszystko to odbywa się w tym przewodniku: https://www.youtube.com/watch?v=7HM6kDBj0vE

Film można również znaleźć w ten link (rozdział 6 - automatycznie wiązania z danymi we wniosku): http://www.lynda.com/ASPNET-tutorials/ASPNET-MVC-4-Essential-Training/109762-2.html

Odpowiedz

10

błąd otrzymuję gdy próbuję zapisać postaci

Oto, gdzie leży twój problem. Podejrzewam, że nie odbudowałeś swojej listy w swojej metodzie postu. Poniższe wiersze kodu, które masz w swojej metodzie get, powinny być również w metodzie post, szczególnie jeśli zwracasz ten sam widok lub widok, który używa ViewBag.categoryList na liście rozwijanej.

var categoryList = new SelectList(new[] { "auto", "elec", "games", "Home" }); 
ViewBag.categoryList = categoryList; 

uzyskać tego rodzaju błędów podczas korzystania z null obiekt z dropdownlistfor html pomocnika. Błąd ten może być łatwo reprodukowane jeśli zrobisz coś podobnego

@Html.DropDownListFor(model => model.PropertyName,null) 
// or 
@Html.DropDownList("dropdownX", null, "") 
+1

dziękuję bardzo! To jest oczywiście poprawna odpowiedź. –

+0

Czego nie rozumiem, dlaczego muszę odbudować w funkcji postu tę samą listę? Myślałem, że potrzebuję tylko jednego wyniku, który został wybrany przez użytkownika i który powraca w polu kategorii modelu. –

+0

Pytanie brzmi: czy używasz zwracającego widoku, który ma '@ Html.DropDownListFor (model => model.category, (SelectList) ViewBag.categoryList)? Jeśli tak, to nie ma znaczenia skąd pochodzi. Liczy się to, że podasz widok z listą ** non NULL **. Jeśli pochodzi z posta, po napisaniu postu wartości już nie ma - po prostu dlatego, że nie "opublikowaliście" ich. –

-1

miałem ten sam problem, myślę, że kiedy idziesz do tworzenia ViewData z tych samych danych w tabeli w tym samym kontrolerze z inną nazwą generuje taki błąd, Właśnie skopiowałem moje stare ViewData ze starej funkcji (metody) do nowej funkcji (metody) w tym samym kontrolerze i to działało dla mnie.

Powiązane problemy