【问题标题】:How to Convert an IEnumerable model object to simple model object in view , MVC3如何将 IEnumerable 模型对象转换为视图中的简单模型对象,MVC3
【发布时间】:2013-03-25 01:04:32
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您是否应该在布局中包含@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")
    

    【讨论】:

    • 谢谢。实际上我首先尝试使用“RenderSection”来渲染菜单。但我必须写下每个视图的部分。我不想要。虽然我想到了 Partialview,但我忽略了它,因为我认为它是为了更大的视野。后来我尝试将模型对象传递给我的布局。我很想知道是否有一种转换方法。
    • 不客气。当然有很多不同的方法可以解决这个问题,但根据我的经验,这个方法似乎最合适。
    猜你喜欢
    • 2013-03-27
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多