我可以防止共享布局用于错误消息吗?
Posted
技术标签:
【中文标题】我可以防止共享布局用于错误消息吗?【英文标题】:Can I prevent a shared layout for being used for error messages? 【发布时间】:2011-12-18 21:32:05 【问题描述】:我正在为我的大部分网站使用在 _ViewStart.cshtml 中设置的共享布局文件。大致如下:
@
Layout = "~/Views/Shared/_Layout.cshtml";
在我的大部分网站和错误报告页面之间几乎没有共享信息。我如何区分这两种情况?
我希望为所有页面加载共享布局,但任何错误报告页面除外。
【问题讨论】:
【参考方案1】:您可以根据每个页面/视图更改布局
@
var model = ViewContext.Controller.ViewData.Model;
if (model is System.Web.Mvc.HandleErrorInfo)
Layout = "";
else
Layout = "~/Views/Shared/_Layout.cshtml";
这是来自我的 Post.vbhtml 页面 - 我只需要更改布局页面以使用不同的布局。
【讨论】:
我刚刚尝试过 - 我更改了 post.vbhtml 页面顶部的布局指令,它使用了不同的布局页面。 该选项提供的解决方案看起来正确,但行为不正确。我特别要求避免加载共享视图。有时不将其显示为最终结果可能有用,但在我的用例中以微妙(且非常重要)的方式失败。【参考方案2】:为了完成,下面提供了一个流行的、有时不正确的解决方案。谨慎选择,如果不确定,请使用已接受的答案。
接受的答案和下面的流行的替代方案之间存在微妙的和有时很重要的区别 。下面的替代方案会导致在大多数情况下看起来正确,但并不总是有效的结果。这似乎是由于视图文件的加载顺序和执行 - 最顶层的共享视图首先加载和执行。如果第一次加载 + 执行过程有副作用,那么这个解决方案将以奇怪而重要的方式中断。
_ViewStart.cshtml
@
Layout = "~/Views/Shared/_Layout.cshtml";
通过将以下内容添加到视图文件的顶部,指示适当的视图不要使用布局:
ErrorView.cshtml
@
Layout = "";
【讨论】:
以上是关于我可以防止共享布局用于错误消息吗?的主要内容,如果未能解决你的问题,请参考以下文章