已定义以下部分但尚未为布局页面“〜/ Views / Shared / _Layout.cshtml”呈现

时间:2012-05-24 11:33:20

标签: asp.net-mvc mobile asp.net-mvc-4 razor

我知道有几个问题已经得到解答,但我没有找到针对我案例的具体内容。

我正在使用MVC4的移动功能。所以我创建了一个_layout.mobile.cshtml和相应的视图。

当我使用移动设备时,会发生上述错误。如您所见,它正在尝试显示常规_layout.cshtml而不是_layout.mobile.cshtml。所以我假设它也试图显示没有相关部分的视图(例如Index.mobile.cshtm)。基本上它是将常规布局与移动视图混合在一起。

这并不是一直发生的。如果我回收池,它会再次运行一段时间,然后突然之间它会再次出现错误,它将一直持续到我再次回收池。

在此之前有没有人见过这个问题可以解决一些问题?

由于 约翰

4 个答案:

答案 0 :(得分:3)

在Views文件夹下的 _ViewStart.cshtml 中,将Layout值更改为自定义布局。我认为这可能会有所帮助..(确保您返回View而不是部分视图)

例如

@{
Layout = "~/Views/Shared/_layout.mobile.cshtml";
}

如果您想更改特定页面的布局,可以在页面顶部将其明确定义为页面指令。

答案 1 :(得分:3)

index.cshtml中的

在原始布局文件“_LayoutHome.cshtml”中定义了一个未在新引导程序布局中定义的部分。

具体来说:@RenderSection("featured", required: false)

因此解决方案是将此部分添加到新布局(在原始布局中查找并粘贴)或者只是从index.cshtml中删除它。

答案 2 :(得分:2)

我也遇到了同样的问题

@section featured {

从视图

答案 3 :(得分:0)

另一种方法是在_ViewStart.cshtml页面中使用条件块。例如,您可能有两种布局,具体取决于设备常规用户。使用伪代码读取设备/浏览器类型位,它看起来像这样:

@{
        if(userIsMobile)
        {
            Layout = "~/Views/Shared/_MobileLayout.cshtml";
        }
        else
        { 
             Layout = "~/Views/Shared/_Layout.cshtml";
        }
}

我用它来显示或隐藏不同类别用户所需的部分或菜单项;它应该适用于特定于设备的布局。

Joey Morgan