无法动态分派扩展方法

 测试帐号 发布于 2023-02-06 14:41

我想在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'的适用方法,但似乎有一个名称的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.

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

3 个回答
  • 为了扩展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)
    

    2023-02-06 14:43 回答
  • 我对这个问题的解决方法是添加:

        @model MyModel
    

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

    2023-02-06 14:43 回答
  • 您在扩展方法中使用动态类型,这是不受支持的.

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

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

    (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" })   
    }
    

    2023-02-06 14:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有