c# - 有什么办法可以绕过 RenderBody() 要求吗?

标签 c# asp.net-mvc razor

我有一个 ASP.NET MVC web 应用程序,其中的所有页面都使用一个主 Layout.cshtml 页面。虽然我通常想要 RenderBody(),但我有一个可以在我的数据库中启用的站点关闭机制,所以我基本上想要一个看起来像这样的布局页面:

@if(DbHelper.SiteIsShutDown) {
    <h1>Site is shut down temporarily</h1>
}
else {
    <h1>Welcome to the site</h1>
    @RenderBody()
}

问题在于,如果 SiteIsShutDown 为真,则 RenderBody() 不会被调用,我得到异常:

The "RenderBody" method has not been called for layout page...

那么有什么办法可以解决这个问题吗?我只是想从我的布局页面呈现一些输出,而没有从我的 View 页面呈现。

最佳答案

您可能应该将主布局留给渲染 View ,而不是在站点关闭时使您的 View 短路。

最好的办法是检查这个并在 Global.asax 中处理它,即在 BeginRequest 中:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if(DbHelper.SiteIsShutDown)
    {
        HttpContext.Current.Response.Redirect("SiteDown");
    }
}

关于c# - 有什么办法可以绕过 RenderBody() 要求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383293/

相关文章:

javascript - html 的按键事件在移动设备上不起作用

c# - 如何让 ASP.NET Web API 使用版本控制和帮助页面扩展?

c# - 解决 Razor 重大变化的最佳方法

c# - 文本框中只允许大写字符

asp.net-mvc - 在 Razor View 中设置下拉列表的选定值

c# - 扩展的WPF工具包-WatermarkPasswordBox防止输入回车值

c# - yield return 相对于返回列表的并发或性能优势

c# - 使用 Google Sheets API 无需身份验证

asp.net-mvc - SQL CE 4.0 还是 SQL Express? Orchard 说的对吗?

c# - 在 C# 中通过字符串获取成员?