如何将IEnumerable模型对象转换为视图中的简单模型对象,MVC3

时间:2013-04-03 11:27:48

标签: c# asp.net-mvc asp.net-mvc-3 ienumerable

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

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

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

1 个答案:

答案 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")