基于@RenderBody控制器的动态内容?

时间:2012-02-03 23:22:17

标签: asp.net-mvc asp.net-mvc-3

我有一个使用@RenderBody显示当前控制器\动作内容的母版页。我遇到了一种情况,我希望根据使用@RenderBody渲染的控制器来显示局部视图。这可能是使用@RenderAction或@RenderPartial吗?感谢

enter image description here

2 个答案:

答案 0 :(得分:3)

您可能需要查看Sections(RenderSection)功能。 Scott Gu描述得很好 http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

答案 1 :(得分:2)

转到您的共享视图,并在_Layout.cshtml位置@Html.Partial("_displayCustomPartial")内。然后,返回到您的共享视图文件夹,并创建一个新视图_displayCustomPartial。打开_displayCustomPartial.cshtml,然后在其中使用此代码:

@{
 var controllerCalled = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;
 var actionCalled = ViewContext.Controller.ValueProvider.GetValue("action").RawValue;
 switch(controllerCalled){
  case "Home": 
   @Html.Partial("_homePartial");
   break;
  case "Work":
   @Html.Partial("_workPartial");
   break;
  case default:break;
 }
}

此方案假设您已为每个控制器方案准备好预制视图(我还包括操作代码,以防您想要使用它)。如果没有准备好预制视图,那么只需输入应该针对每个案例显示的代码,而不是渲染另一个视图。

这与Sections之间的主要区别在于Sections与他们的视图共享模型,并且使用部分视图将允许包含单独的模型。