Eu quero ter DropDownListFor em 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" })
}
no controlador
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);
}
mas eu recebo este erro
'
System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>
' não tem nenhum método aplicável chamado 'DropDownListFor
', mas parece ter um método de extensão com esse nome. Os métodos de extensão não podem ser despachados dinamicamente. Considere lançar os argumentos dinâmicos ou chamar o método de extensão sem a sintaxe do método de extensão.
Não consigo entender o erro, o que devo verificar?
c#
asp.net-mvc
asp.net-mvc-3
nnmmss
fonte
fonte
ViewBag.MagNo
para umbool?
tipo?Minha solução para esse problema foi adicionar:
No topo do controle parcial. Eu tinha me esquecido disso.
fonte
Para expandir o assunto dos métodos de extensão MVC (que é como encontrei esta questão), gosto de usar a
connection.Query()
sintaxe de Dapper, que retornará resultados como umIEnumerable<dynamic>
.Também é possível usar objetos dinâmicos:
Chamando o método estático diretamente, de acordo com a resposta de Jon Skeet :
Envolvendo-o em uma classe.
Em seguida, em seu MVC View:
fonte