我想在MVC中使用DropDownListFor
@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, IOrderedQueryable > orderByFunc = null; Expression > 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
'没有名为'> DropDownListFor
'的适用方法,但似乎有一个名称的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.
我无法理解错误,我应该检查一下它?
为了扩展MVC扩展方法的主题(这是我遇到这个问题的方式),我喜欢使用Dapper的connection.Query()
语法,该语法将返回结果为IEnumerable<dynamic>
。
也可以通过以下方式使用动态对象:
根据Jon Skeet的回答,直接调用static方法:
@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)
我对这个问题的解决方法是添加:
@model MyModel
在部分控制的顶部.我忘了它.
您在扩展方法中使用动态类型,这是不受支持的.
将动态类型转换为实际类型,它将起作用.
从我现在看到的,我会说:
(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" }) }