c# - 尝试在没有模型出现 "tree may not contain dynamic operation"错误的情况下使用 DropDownListFor

标签 c# asp.net-mvc-4 html.dropdownlistfor

我正在尝试使用 DropDownListFor<>在我的 LayoutTemple 中,所以我无权访问模型。所以我所做的是在 @{}在我添加的页面顶部阻止 FFInfo.DAL.SoloClassesContext db = new FFInfo.DAL.SoloClassesContext();它使用我要使用的类调用 DBContext 的实例。然后我将列表放在我想要使用的地方

@Html.DropDownListFor(
m => m.ID,
new SelectList(db.CultureCodes, "ID", "DisplayName"));

但是当我运行代码时,我得到了 m => m.ID 行的错误.给出的错误是:

An expression tree may not contain a dynamic operation

我从未使用过这种类型的下拉菜单,对 MVC 还是个新手。谁能告诉我我做错了什么以及如何解决?

最佳答案

我建议对您的解决方案进行一些更改:

  1. 代替DropDownListFor()只使用 DropDownList()

    @Html.DropDownList("CultureCode", new SelectList(db.CultureCodes, "ID", "DisplayName"))

  2. 与其在您的 View 中访问您的数据库数据...这非常不符合标准并且您将 View (通常是 HTML)与数据库耦合...您应该将查询放在您的 Controller 中并且将数据放入 ViewBag 集合。

因此,在您的布局中,您应该使用:

 @Html.DropDownList("CultureCode", (SelectList)ViewBag.Codes, "Select one...")

在你的 Controller 中你加载它如下:

 ViewBag.Codes = new SelectList(db.CultureCodes, "ID", "DisplayName");

编辑: 你可以做一个 Action 过滤器,加载或注入(inject) CultureCodesViewBag :

public class IncludeCultureCodesAttribute : ActionFilterAttribute
{
        public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var controller = filterContext.Controller;

        // IController is not necessarily a Controller
        if (controller != null)
        {
            var db = new YourContext();
            controller.ViewBag.Codes = new SelectList(db.CultureCodes, "ID", "DisplayName"));;
        }
    }
}

然后,在您的 Controller 操作中...您可以用 [IncludeCultureCodes] 装饰它们.因此,具有该属性的操作将加载代码集合。

但我认为加载一次布局(例如在 Home/Index 上)然后使用局部 View 是一种更好的方法。这样,您只需重新加载返回主页的布局...或其他全 View 调用。

关于c# - 尝试在没有模型出现 "tree may not contain dynamic operation"错误的情况下使用 DropDownListFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346122/

相关文章:

c# - 通过 GitHub 将 MVC4 C# 应用程序部署到 Azure。我的 .gitignore 中应该包含什么?

c# - MVC 多个 DropDownLists from 1 List<SelectListItem>

c# - 从带有波浪号 (~) 符号的 URL 获取完整 URL

c# - python:math.sqrt(x) 函数有多准确?

c# - 我的应用程序的 MySQL 访问被拒绝,但其他应用程序工作正常

css - 在 Mvc4 的 _Layout.cshtml 中调用 Styles.Render 时出现 WebGrease 错误

c# - 如何使用 RtdServer 在 C# 中创建实时 Excel 自动化插件?

c# - MVC 应用程序中的 Require.js

asp.net-mvc - 如何创建具有所需验证的 ASP.Net MVC DropDownList

asp.net-mvc - MVC - 更改下拉菜单中的默认文本