Методы расширения не могут быть отправлены динамически
Я хочу, чтобы DropDownListFor в 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" })
}
в контроллере
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);
}
но я получаю эту ошибку
'
System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>
"не имеет применимого метода с именем"DropDownListFor
но, похоже, имеет метод расширения с таким именем. Методы расширения не могут быть динамически отправлены. Попробуйте привести динамические аргументы или вызвать метод расширения без синтаксиса метода расширения.
Я не могу понять ошибку, что я должен проверить на это?
3 ответа
Вы используете динамические типы в методах расширения, что не поддерживается.
Приведите динамические типы к реальным типам, и это будет работать.
Из того, что я вижу сейчас, я бы сказал:
(string) ViewBag.MagNo
Что приведет к
@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" })
}
Мое решение этой проблемы было добавить:
@model MyModel
Вверху частичный контроль. Я забыл это.
Чтобы расширить тему методов расширения MVC (именно так я столкнулся с этим вопросом), мне нравится использовать Dapper's. connection.Query()
синтаксис, который будет возвращать результаты в виде IEnumerable<dynamic>
,
Также возможно использовать динамические объекты:
Вызов статического метода напрямую, согласно ответу Джона Скита:
@model IEnumerable<dynamic> @PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
Заворачивать это в класс.
public class DynamicQueryResult { public dynamic QueryResults {get; set;} }
Тогда в вашем MVC View:
@model Namespace.DynamicQueryResult @Html.Partial("~/link/to/_partialView.cshtml", Model)