扩展方法不能dynamic分派
我想在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<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
'的可用方法,但似乎有一个按该名称的扩展方法。 扩展方法不能dynamic分派。 考虑转换dynamic参数或调用扩展方法而不使用扩展方法语法。
我无法理解错误,我应该检查什么?
您在扩展方法中使用dynamictypes,这是不受支持的。
将dynamictypes转换为实际types,它将起作用。
从我现在看到的,我会说:
(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的connection.Query()
语法,它将以IEnumerable<dynamic>
返回结果。
也可以通过以下方式使用dynamic对象:
-
根据Jon Skeet的回答直接调用静态方法:
@model IEnumerable<dynamic> @PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
-
把它包装在一个class级里。
public class DynamicQueryResult { public dynamic QueryResults {get; set;} }
然后在你的MVC视图中:
@model Namespace.DynamicQueryResult @Html.Partial("~/link/to/_partialView.cshtml", Model)
- 使用DataAnnotations和DataType进行电子邮件模型validation
- ASP.NET MVC2 / 3中“runAllManagedModulesForAllRequests”的正确用法是什么?
- ASP.NET MVC Ajaxerror handling
- 我想了解@ Html.DisplayFor(modelItem => item.FirstName)中的lambdaexpression式
- 在Html.DropDownList的<option>下添加html类标记
- 是否有可能configurationAutofac使用ASP.NET MVC和ASP.NET Web Api
- 如何在Visual Studio 2012或Visual Studio 2013中打开一个旧的MVC项目?
- 没有布局的剃刀视图
- 在MVC脚本包中使用CDN。 我错过了什么?