试图在MVC4和Razor上使用两个布局页面

时间:2013-06-28 15:35:11

标签: c# asp.net-mvc asp.net-mvc-4 razor

当我在视图(非主体)上使用@RenderBody时,我会收到此消息Error: The file "~/Views/Shared/_Sistema.cshtml" cannot be requested directly because it calls the "RenderBody" method

我不明白,因为我是MVC的新手。

我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:3)

RenderBody仅适用于大师。此方法呈现不属于任何特定部分的内容页面的标记。如果您的视图调用RenderBody,则可能出现两种情况:

  1. 这是一个错误,这个观点不应该叫它。
  2. 或者此视图是主视图,您应该使用从该主服务器继承布局的其他视图。

答案 1 :(得分:3)

如果您在_Sistema.cshtml文件中使用Renderbody,请将其设置为布局页面。

并添加另一个名为MyPartial.cshtml的部分页面,其布局名称为_Sistema.cshtml。

Renderbody应该只在主页面中。即布局页面。

所以你的_Sistema.cshtml页面应该只包含以下内容:

@RenderBody()
@RenderSection("scripts", required: false) @*----Optional---*@

然后您的新部分页面MyPartial.cshtml应包含以下内容:

@{
    Layout = "~/_Sistema.cshtml";
}

然后在视图中使用您的部分页面,如下所示:

@Html.Partial("MyPartial")

希望它有所帮助。

答案 2 :(得分:2)

您只需要与_ViewStart.cshtml进行交互

并使用if condition为每组用户指定share mater页面。  例如用户是admin然后用户_Layout.cshtm其他明智的使用_Layout2.cshtml

使用以下代码:

@{
    if(User.Identity.Name.ToLower()=="admin") {
        Layout = "~/Views/Shared/_Layout2.cshtml";
    }
    else {
        Layout = "~/Views/Shared/_Layout.cshtml";
    } 
}