我必须将模型对象传递给我的创建视图,以便在提交时单击此模型对象进行更新。 但同时我在其主要布局中使用数据列表来渲染动态菜单。
两者都使用相同的模型类。但是对于我给出的一个
@model IEnumerable<DynaPortalMVC.Models.Page>
并在创建视图中我将其作为
@model DynaPortalMVC.Models.Page
在控制器中: -
public ActionResult Create()
{
return View();
}
但是这在_Layout.cshtml中给出了一个错误,因此上面的actionresult甚至都没有执行。
Exception Details: System.ArgumentNullException: Value cannot be null.Parameter name: source
所以我认为我应该传递Ienumerable对象来创建视图,然后将其转换为简单的模型对象,以便可以更新它。请就此提出建议。
答案 0 :(得分:2)
你的布局中是否应该有@model指令是值得怀疑的。在我看来,你应该通过调用HtmlHelper.Action方法使用部署视图和从Layout调用的控制器中的动作来渲染动态菜单,如下所示:
菜单的部分视图(名为_Menu.cshtml的文件):
@model IEnumerable<DynaPortalMVC.Models.Page>
<ul>
@foreach (var page in Model)
{
<li>@page.Name</li>
}
</ul>
您的家庭控制器(或任何其他)中名为_Menu的操作:
public ActionResult _Menu()
{
IEnumerable<DynaPortalMVC.Models.Page> model = new List<DynaPortalMVC.Models.Page>
{
new DynaPortalMVC.Models.Page { Name = "Page1" },
new DynaPortalMVC.Models.Page { Name = "Page2" },
new DynaPortalMVC.Models.Page { Name = "Page3" },
new DynaPortalMVC.Models.Page { Name = "Page4" },
};
return PartialView("_Menu", model);
}
您的布局中的这行代码用于呈现菜单:
@Html.Action("_Menu", "Home")