Chcę mieć DropDownListFor w MVC
@foreach (var item in Model)
{
@Html.DropDownListFor(modelItem => item.TitleIds, new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable, "TitleId", "Title.TitleText"), "No: " + ViewBag.MagNo, new { id = "TitleIds" })
}
w kontrolerze
public ActionResult ArticleList(int id)
{
ArticleWriter_ViewModel viewModel = new ArticleWriter_ViewModel();
Func<IQueryable<NumberTitle>, IOrderedQueryable<NumberTitle>> orderByFunc = null;
Expression<Func<NumberTitle, bool>> filterExpr = null;
if (id > 0)
{
filterExpr = p => p.MagazineId.Equals(id);
}
var wholeTitles = unitOfWork.NumberTitleRepository.Get(filterExpr, orderByFunc, "Magazine,Title").ToList();
ViewBag.MagNo = wholeTitles[0].Magazine.MagNo.ToString();
ViewBag.MagId = wholeTitles[0].Magazine.Id;
ViewBag.TitleNames = wholeTitles;
return View("../Panel/Magazine/ArticleList", "_BasicLayout", viewModel);
}
ale otrzymuję ten błąd
„
System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>
” nie ma odpowiedniej metody o nazwie „DropDownListFor
”, ale wygląda na to, że ma metodę rozszerzenia o tej nazwie. Metody rozszerzające nie mogą być wysyłane dynamicznie. Rozważ rzutowanie dynamicznych argumentów lub wywołanie metody rozszerzenia bez składni metody rozszerzenia.
Nie rozumiem błędu, co mam to sprawdzić?
c#
asp.net-mvc
asp.net-mvc-3
nnmmss
źródło
źródło
ViewBag.MagNo
nabool?
typ?Moją poprawką dla tego problemu było dodanie:
U góry częściowej kontroli. Zapomniałem o tym.
źródło
Aby rozwinąć temat metod rozszerzających MVC (i tak natknąłem się na to pytanie), lubię używać
connection.Query()
składni Dappera, która zwróci wyniki jako plikIEnumerable<dynamic>
.Możliwe jest również wykorzystanie obiektów dynamicznych poprzez:
Bezpośrednie wywołanie metody statycznej, zgodnie z odpowiedzią Jona Skeeta :
Pakowanie w klasę.
Następnie w widoku MVC:
źródło