1

我必须将模型对象传递给我的创建视图,以便在提交时单击此模型对象得到更新。但与此同时,我在其主布局中使用数据列表来呈现动态菜单。

两者都使用相同的模型类。但对于一个我给

@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 对象来创建视图,然后将其转换为简单的模型对象,以便可以更新它。请就此提出建议。

4

1 回答 1

2

您是否应该在布局中包含 @model 指令是值得怀疑的。在我看来,您应该通过调用 HtmlHelper.Action 方法在您的控制器中使用局部视图和一个动作来呈现您的动态菜单,如下所示:

菜单的部分视图(名为 _Menu.cshtml 的文件):

@model IEnumerable<DynaPortalMVC.Models.Page>

<ul>
@foreach (var page in Model)
{
    <li>@page.Name</li>    
}
</ul>

您的 Home 控制器(或任何其他)中名为 _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")
于 2013-04-03T11:53:07.987 回答