Quiero tener DropDownListFor en 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" })
}
en 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);
}
pero me sale este error
'
System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>
' no tiene un método aplicable llamado 'DropDownListFor
' pero parece tener un método de extensión con ese nombre. Los métodos de extensión no se pueden distribuir dinámicamente. Considere convertir los argumentos dinámicos o llamar al método de extensión sin la sintaxis del método de extensión.
No entiendo el error, ¿qué debo verificar?
c#
asp.net-mvc
asp.net-mvc-3
nnmmss
fuente
fuente
ViewBag.MagNo
a unbool?
tipo?Mi solución para este problema fue agregar:
En la parte superior del control parcial. Lo había olvidado.
fuente
Para ampliar el tema de los métodos de extensión MVC (que es cómo me encontré con esta pregunta), me gusta usar la
connection.Query()
sintaxis de Dapper, que devolverá los resultados como unIEnumerable<dynamic>
.También es posible utilizar objetos dinámicos mediante:
Llamar al método estático directamente, según la respuesta de Jon Skeet :
Envolviéndolo en una clase.
Luego, en su Vista MVC:
fuente