Методы расширения не могут быть динамически отправлены
Я хочу иметь 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
', но по этому имени имеет метод расширения. Методы расширения не могут динамически отправляться. Подумайте о том, как использовать динамические аргументы или вызывать метод расширения без синтаксиса метода расширения.
Я не могу понять ошибку, что я должен проверить?
Ответы
Ответ 1
Вы используете динамические типы в методах расширения, которые не поддерживаются.
Передача динамических типов в фактические типы, и это сработает.
Из того, что я вижу сейчас, я бы сказал:
(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" })
}
Ответ 2
Мое исправление для этой проблемы состояло в том, чтобы добавить:
@model MyModel
В верхней части частичного управления. Я забыл об этом.
Ответ 3
Чтобы расширить тему методов расширения MVC (как я столкнулся с этим вопросом), мне нравится использовать синтаксис Dapper connection.Query()
, который возвращает результаты как IEnumerable<dynamic>
.
Также можно использовать динамические объекты:
-
Вызов статического метода напрямую, за Jon Skeet answer:
@model IEnumerable<dynamic>
@PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
-
Обертка в классе.
public class DynamicQueryResult
{
public dynamic QueryResults {get; set;}
}
Затем в вашем представлении MVC:
@model Namespace.DynamicQueryResult
@Html.Partial("~/link/to/_partialView.cshtml", Model)