Jez*_*Jez 5 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()
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,如果SiteIsShutDown是真的,那么RenderBody()不会被调用,我得到异常:
尚未为布局页面调用"RenderBody"方法...
那么我有办法解决这个问题吗?我只是想从我的布局页面渲染一些输出,而不是我的视图页面.
您可能应该将主布局保留为渲染视图,而不是在站点关闭时使视图短路.
你最好的选择是检查这个并在Global.asax中处理它,即BeginRequest:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if(DbHelper.SiteIsShutDown)
{
HttpContext.Current.Response.Redirect("SiteDown");
}
}
Run Code Online (Sandbox Code Playgroud)
Jez*_*Jez -4
最后,我决定采用与 Jerad Rose 的解决方案非常相似的解决方案,但进行了修改,以便它只在根目录中提供一个名为 的静态文件SiteDisabled.htm,并且还进行了修改,以便当站点打开时它不会进入无限重定向循环。禁用:
protected void Application_BeginRequest(object sender, EventArgs ea) {
string siteDisabledFilePath = "/SiteDisabled.htm";
if (CachingAndUtils.IsSiteDisabled && HttpContext.Current.Request.FilePath != siteDisabledFilePath) {
HttpContext.Current.Response.Redirect(siteDisabledFilePath);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6082 次 |
| 最近记录: |