无法动态分派扩展方法

nnm*_*mss 110 c# asp.net-mvc asp.net-mvc-3

我想在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" })   
}
Run Code Online (Sandbox Code Playgroud)

在控制器中

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);
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误

' System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>>'没有名为' DropDownListFor'的适用方法,但似乎有一个名称的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.

我无法理解错误,我应该检查一下它?

bas*_*bas 190

您在扩展方法中使用动态类型,这是不受支持的.

将动态类型转换为实际类型,它将起作用.

从我现在看到的,我会说:

(string) ViewBag.MagNo
Run Code Online (Sandbox Code Playgroud)

哪会导致

@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" })   
}
Run Code Online (Sandbox Code Playgroud)

  • @nnmmss然后ViewBag.MagNo不是一个int,而是一个字符串.把它扔成一根绳子,你应该是金色的 (3认同)
  • 它说无法将类型“字符串”转换为“整数” (2认同)

mka*_*kaj 41

我对这个问题的解决方法是添加:

    @model MyModel
Run Code Online (Sandbox Code Playgroud)

在部分控制的顶部.我忘了它.

  • 如果使用大写@Model而不是小写模型,也会出现此错误. (3认同)

Jas*_*son 5

为了扩展MVC扩展方法的主题(这是我遇到这个问题的方式),我喜欢使用Dapper的connection.Query()语法,该语法将返回结果为IEnumerable<dynamic>

也可以通过以下方式使用动态对象: