2013-04-03 87 views
1

我必須將模型對象傳遞給我的創建視圖,以便在提交時單擊此模型對象進行更新。 但與此同時,iam使用其主佈局中的數據列表呈現動態菜單。如何將IEnumerable模型對象轉換爲視圖中的簡單模型對象,MVC3

兩者都使用相同的模型類。但是,對於一個我給作爲

@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的對象來創建視圖,然後有將其轉換爲簡單的模型對象,以便它可以被更新。請對此提出建議。

回答

2

您的佈局中是否應該有@model指令值得商榷。在我看來,您應該通過使用調用HtmlHelper.Action方法調用Layout的局部視圖和動作來呈現動態菜單,如下所示:

菜單的局部視圖(文件名爲_Menu.cshtml) :

在您的主頁控制器命名_Menu
@model IEnumerable<DynaPortalMVC.Models.Page> 

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

行動(或任何其他):

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") 
+0

Thanks.Active然我第一次嘗試使用'RenderSection'呈現菜單。但是我必須寫下每個視圖的部分。我不想要。儘管偏側視圖浮現在腦海,但我忽略它,因爲我認爲這是爲了更大的視野。後來我試着將模型對象傳遞給我的佈局。而且我很有興趣知道是否有轉換的方法。 – Jesna

+0

不客氣。當然有許多不同的方法可以解決這個問題,但根據我的經驗,這個方法似乎是最合適的。 – brke

相關問題