c# - que - metodos de extension rural
Los métodos de extensión no pueden enviarse dinámicamente (3)
Está utilizando tipos dinámicos en los métodos de extensión, que no es compatible.
Echa los tipos dinámicos a tipos reales, y funcionará.
Por lo que veo ahora, diría:
(string) ViewBag.MagNo
Lo que resultaría en
@foreach (var item in Model)
{
@Html.DropDownListFor(modelItem => item.TitleIds,
new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable,
"TitleId", "Title.TitleText"),
"No: " + (string) ViewBag.MagNo,
new { id = "TitleIds" })
}
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 el 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 obtengo este error
''
System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>
'' no tiene ningún 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 enviar los argumentos dinámicos o llamar al método de extensión sin la sintaxis del método de extensión.
No puedo entender el error, ¿qué debo comprobar?
Mi solución para este problema fue agregar:
@model MyModel
En la parte superior del control parcial. Lo había olvidado
Para ampliar el tema de los métodos de extensión MVC (que es la forma en que encontré esta pregunta), me gusta utilizar la sintaxis de connection.Query()
IEnumerable<dynamic>
connection.Query()
que devolverá los resultados como un IEnumerable<dynamic>
.
También es posible usar objetos dinámicos por:
Llamando directamente al método estático, según la answer Jon Skeet:
@model IEnumerable<dynamic> @PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
Envolviéndolo en una clase.
public class DynamicQueryResult { public dynamic QueryResults {get; set;} }
Luego en tu MVC View:
@model Namespace.DynamicQueryResult @Html.Partial("~/link/to/_partialView.cshtml", Model)