2010-05-05 36 views
3

我想通過從操作方法中返回它,將部分視圖嵌入到ASP.NET MVC頁面中。將ViewData傳遞給使用Html.Action返回的PartialView

以我基本視圖,我會:

<%= Html.Action("MyPartialViewAction") %> 

我的控制器將具有類似的操作方法:

[ChildActionOnly] 
public ActionResult MyPartialViewAction() 
{ 
    return PartialView("MyPartialView"); 
} 

我預期返回的局部視圖(MyPartialView)能夠訪問的ViewData是在基本頁面的控制器操作中設置的,但似乎並非如此。如果我用插入部分觀點我基本視圖下它的工作原理:

<% Html.RenderPartial("MyPartialView") %> 

我不想這樣做,但因爲我希望我的「MyPartialViewAction」執行邏輯,以確定哪些局部視圖返回。

回答

3

我相信它實際上會創建一個新的控制器,這意味着它創建的任何視圖都將具有來自該控制器的ViewData,而不是創建調用Action方法的視圖的控制器。您可能想嘗試:

  1. 將您的選擇邏輯重構爲單獨的方法,並在原始操作中使用它來選擇局部視圖名稱。在你的模型中填充並通過RenderPartial使用它。
  2. 使用TempData(或會話,直接)來保存上一個操作的ViewData,並從中水化新控制器的ViewData。
  3. 如果所需的數據有限,請將其傳遞到RouteValueDictionary中 - 您的操作將需要接收這些參數。
相關問題