我可以防止用于错误消息的共享布局吗?
问题描述:
我在_ViewStart.cshtml中为我的大部分网站使用共享布局文件。沿线的东西:我可以防止用于错误消息的共享布局吗?
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
在我的大部分网站和错误报告页面之间几乎没有信息共享。我如何区分这两种情况?
我想为所有页面加载共享布局,除了任何错误报告。
答
你可以在每页/视图基础
@{
var model = ViewContext.Controller.ViewData.Model;
if (model is System.Web.Mvc.HandleErrorInfo) {
Layout = "";
} else {
Layout = "~/Views/Shared/_Layout.cshtml";
}
}
这是从我的Post.vbhtml页面更改布局 - 我只需要改变布局页面使用不同的布局。
答
完成后,此问题有一个流行,有时不正确的解决方案提供下面。谨慎选择,如果不确定,请使用已接受的答案。
有微妙和有时重要差异的接受的答案及以下的流行的选择之间。下面的替代方案导致的结果看起来是正确的大部分时间,但并不总是工作。这似乎是由于加载顺序和视图文件的执行所致 - 最顶端的共享视图首先被加载并执行。如果第一次加载+执行进程有副作用,该解决方案将以奇怪和重要的方式破解。
_ ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
指导适当的视图不使用布局,通过加入以下的视图文件的顶部:
ErrorView.cshtml
@{
Layout = "";
}
我刚试过 - 我改变了布局指令在我的post.vbhtml页面的顶部,它使用了不同的布局页面。 – 2011-12-18 22:08:22
该选项提供了*看起来正确,但*表现不正确的解决方案。我特别要求避免加载共享视图。在某些时候不显示它作为最终结果可能会有用,但是对于我的用例而言,微妙(并且非常重要)的方式失败了。 – blueberryfields 2011-12-18 22:28:01