我正在试验MvcContrib 子控制器。查看源代码中的示例,您的父控制器 (HomeController) 采取了一个将子控制器 (FirstLevelSubController) 作为参数的操作:
public class HomeController : Controller
{
public ActionResult Index(FirstLevelSubController firstLevel)
{
ViewData["Title"] = "Home Page";
return View();
}
}
在 Home 的索引视图中,您可以像这样调用 ViewData.Get 来呈现子控制器及其视图:
<div style="border:dotted 1px blue">
<%=ViewData["text"] %>
<% ViewData.Get<Action>("firstLevel").Invoke(); %>
</div>
子控制器的动作被调用(忽略第二级控制器,该示例只是演示如何嵌套多个子控制器):
public class FirstLevelSubController : SubController
{
public ViewResult FirstLevel(SecondLevelSubController secondLevel)
{
ViewData["text"] = "I am a first level controller";
return View();
}
}
这一切都有效,子控制器的视图在父视图中呈现。
但是,如果我在家庭控制器的操作中需要其他参数怎么办?例如,我可能想将 Guid 传递给控制器的 index 方法:
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")
也许我以错误的方式接近这个?我怎样才能让我的父控制器使用子控制器,但也可以做一些有趣的事情,比如接受参数/参数?