2

私はMvcContribサブコントローラーを試しています。ソースの例を見ると、親コントローラー(HomeController)は、サブコントローラー(FirstLevelSubController)をパラメーターとして受け取るアクションを実行します。

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>

サブコントローラーのアクションが呼び出されます(2番目のレベルのコントローラーは無視してください。この例は、複数のサブコントローラーをネストする方法を示しているだけです)。

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")

おそらく私はこれに間違った方法でアプローチしていますか?親コントローラーにサブコントローラーを使用させるだけでなく、パラメーターや引数を受け入れるなどの興味深いことを行うには、他にどのような方法がありますか?

4

1 に答える 1

3

このブログ投稿をご覧ください:

サブコントローラーへのオブジェクトの受け渡し
http://mhinze.com/passing-objects-to-subcontrollers/

SubControllerは非推奨であることに注意してください。それらはに置き換えられましたRenderAction

于 2009-11-23T23:27:25.453 に答える