我有一个使用@RenderBody显示当前控制器\动作内容的母版页。我遇到了一种情况,我希望根据使用@RenderBody渲染的控制器来显示局部视图。这可能是使用@RenderAction或@RenderPartial吗?感谢
答案 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与他们的视图共享模型,并且使用部分视图将允许包含单独的模型。