2009-11-23 109 views
2

我正在試驗MvcContrib subcontrollers。縱觀源的例子,你的父母控制器(HomeController中)採用這需要子控制器(FirstLevelSubController)作爲參數的操作:使用帶操作參數的ASP.NET MVC子控制器?

public class HomeController : Controller 
{ 
    public ActionResult Index(FirstLevelSubController firstLevel) 
    { 
     ViewData["Title"] = "Home Page"; 
     return View(); 
    } 
} 

在首頁的索引視圖,你叫ViewData.Get這樣呈現子控制器和它的觀點:

<div style="border:dotted 1px blue"> 
    <%=ViewData["text"] %> 
    <% ViewData.Get<Action>("firstLevel").Invoke(); %> 
</div> 

子控制器的動作被調用(忽略secondlevelcontroller,這個例子只是演示如何可以嵌套多個子控制器):

public class FirstLevelSubController : SubController 
{ 
    public ViewResult FirstLevel(SecondLevelSubController secondLevel) 
    { 
     ViewData["text"] = "I am a first level controller"; 
     return View(); 
    } 
} 

這一切都有效,子控制器的視圖在父視圖內呈現。

但是如果我需要其他參數在我的家庭控制器的行動?例如,我可能要一個GUID傳遞給我的控制器的指數方法:

public class HomeController : Controller 
{ 
    public ActionResult Index(Guid someId, FirstLevelSubController firstLevel) 
    { 
     //Do something with someId 
     ViewData["Title"] = "Home Page"; 
     return View(); 
    } 
} 

似乎沒有是沒有辦法做到<%ViewData.Get(「firstLevel」)的invoke()。 %>帶參數。所以,我無法弄清楚如何從另一個控制器將參數傳遞這樣的鏈接到我的控制器:

Html.ActionLink<HomeController>(x => x.Index(someThing.Id), "Edit") 

也許我處理這個錯誤的方式?我還能如何讓父控制器使用子控制器,還能做些有趣的事情,比如接受參數/參數?

回答

3

看一看這個博客帖子:

傳遞對象子控制器
http://mhinze.com/passing-objects-to-subcontrollers/

注意,子控制器已被棄用。它們已被RenderAction取代。

+0

不錯的地方 - 它看起來像SubControllers確實被棄用 - 我嘗試RenderAction,它只是第一次運行非常漂亮:)謝謝,我會花好幾天的時間努力讓它工作! – 2009-11-24 08:30:37

+0

找不到頁面! – 2013-03-06 21:57:43

+0

@AbhishekMehta:[此Wayback Machine鏈接](http://web.archive.org/web/20100529051721/http://mhinze.com/passing-objects-to-subcontrollers)現在應該足夠了。另請注意我答案中的最後一段。 – 2013-03-06 22:01:01

相關問題