2

我正在试验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")

也许我以错误的方式接近这个?我怎样才能让我的父控制器使用子控制器,但也可以做一些有趣的事情,比如接受参数/参数?

4

1 回答 1

3

看看这篇博文:

将对象传递给子控制器
http://mhinze.com/passing-objects-to-subcontrollers/

请注意,不推荐使用 SubController。它们已被替换为RenderAction.

于 2009-11-23T23:27:25.453 回答