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

本文关键字:两个 布局 MVC4 Razor | 更新日期: 2023-09-27 18:20:14

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

我不理解它,因为我是MVC的新手。

我能做什么?

谢谢!

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

如果在_Sistema.cshtml文件中使用Renderbody,则将其作为Layout页面。

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

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

因此,您的_Sistema.chtml页面应该只包含以下内容:

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

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

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

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

@Html.Partial("MyPartial")

希望能有所帮助。

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

  1. 要么这是一个错误,这种观点不应该称之为错误
  2. 或者此视图是主视图,您应该使用继承此主视图布局的其他视图

您只需要与_ViewStart.cshtml 交互

并使用if条件为每组用户指定共享主页。例如,用户是admin,然后用户_Layout.cshtm其他方式使用_Layout2.cshtml

使用以下代码:

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

根据我的经验,我已经为同样的问题挣扎了好几天。经过进一步的调查,我发现在创建一个新的Umbraco网站时,我可以选择模板。这解决了RenderBody问题。当创建没有模板的布局页面时,它不会将母版页视为布局,因此无法调用RenderBody方法。使用模板会自动将母版页设置为Layout,从而允许您调用RenderBody。我希望这能有所帮助。