2013-01-20 88 views
3

我還是比較新的MVC 3.我需要通過控制器將我的@ Html.Action方法的數據傳遞給局部視圖。將數據從Html.Action傳遞到局部視圖

所以這裏是我的流程。

我會打電話給@ Html.Action這樣的:

@Html.Action("SidebarMain", "Home", new List<int>(new int[] {1, 2, 3})) 

然後,它會打我的控制器。這是我在我家的控制器方法:

public ActionResult SidebarMain(List<int> items) 
{ 
    return View(items); 
} 

然後我的局部視圖應該能夠訪問像這樣的數據:

@model List<int> 

@{ 
    ViewBag.Title = "SidebarMain"; 
    Layout = null; 
} 

<div> 
@foreach (int item in Model) 
{ 
    <div>@item</div> 
} 
</div> 

但是:我發現了一個空例外模型,意思它沒有通過。

+1

爲什麼downvote沒有評論? – abatishchev

回答

4

試試這個:

Html.Action("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) }) 

將斷點設置在SidebarMain行動看,如果你是從達斯·維達越來越items

0

很好的回答。你是否將它作爲Ajax返回?如果您在主視圖嵌入它,你應該用

return PartialView("SidebarMain", model); 

返回它作爲一個PartialView這是SidebarMain是,你正在返回的局部視圖的名稱。請結合DarthVader的建議嘗試此操作,並確保您獲得模型以返回到視圖。

發佈後,我意識到您正在使用Html.Action。如果這是一個真正的邊欄,它應該用Ajax來加載爲局部視圖,你應該叫

Ajax.ActionLink("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) }) 

這將讓你留在您的當前頁面上。如果你是不是在找Ajax功能,我的兔子線索:)

1

總之道歉:你的代碼是在Html.Action()缺少項目參數名稱。 除此之外,代碼應該是功能性的。

Html.Action("SidebarMain", "Home", new {items = new List<int>(new int[] {1, 2, 3}) }) 

作爲建議的做法,我會用我的觀點專用ViewModel而不僅僅是發送整數數組。因爲在這種乾淨的ViewModel這種方式中 - 您在視圖中顯示的屬性容器,隨着代碼的不斷髮展,您的代碼可能會在稍後添加其他屬性。

參考的視圖模型概念的使用:Exercise 5: Creating a View Model

+0

只是爲了澄清,通過ViewModel你的意思是一個模型,該視圖在正確的強類型? –

+0

是的,你說得對,這一點試圖在我的第二段中加以澄清/提及。 –

+1

謝謝你。我沒有意識到參數名稱必須在視圖中與控制器中的相同。 – coggicc

0

達斯·維達的建議可能會奏效。這是我落得這樣做:

1)刪除時調用它像這樣的控制器

2):

@{Html.RenderPartial("SidebarMain", new int[] {1,3,4,2});} 

3)這是我的看法代碼:

@model int[] 
@foreach(int item in Model){ 
...