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