使用带操作参数的ASP.NET MVC子控制器?
问题描述:
我正在试验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")
也许我处理这个错误的方式?我还能如何让父控制器使用子控制器,还能做些有趣的事情,比如接受参数/参数?
答
看一看这个博客帖子:
传递对象子控制器
http://mhinze.com/passing-objects-to-subcontrollers/
注意,子控制器已被弃用。它们已被RenderAction
取代。
不错的地方 - 它看起来像SubControllers确实被弃用 - 我尝试RenderAction,它只是第一次运行非常漂亮:)谢谢,我会花好几天的时间努力让它工作! – 2009-11-24 08:30:37
找不到页面! – 2013-03-06 21:57:43
@AbhishekMehta:[此Wayback Machine链接](http://web.archive.org/web/20100529051721/http://mhinze.com/passing-objects-to-subcontrollers)现在应该足够了。另请注意我答案中的最后一段。 – 2013-03-06 22:01:01