2012-11-14 34 views
5

我有一个ASP.NET MVC Web应用程序,其中所有页面使用单个主页面Layout.cshtml页面。虽然我平时想RenderBody(),我可以在我的数据库中启用站点关闭机制,所以我基本上是想有一个看起来像一个页面布局:有什么办法可以解决RenderBody()的需求吗?

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

麻烦的是,如果SiteIsShutDown是真实的,然后RenderBody()不会被调用,我得到异常:

的“RenderBody”方法没有被调用布局页...

那么,有没有办法可以围绕这个?我只是想要从我的布局页面呈现一些输出,并且没有任何从我的查看页面。

回答

-3

最后,我决定去非常相似Jerad罗斯的解决方案的东西,但修改,以便它只是提供了在所谓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); 
    } 
} 
+2

为自己的答案投票真的不是很酷,但更酷的是使用另一个人的答案,并稍微修改它,只是为了做出不同的答案... –

5

您可能应该离开主布局渲染视图,并且在发生站点关闭时不要短路视图。

你最好的选择是在BeginRequest检查这一点,处理它在Global.asax中,即:

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

有没有办法显示“网站关闭”的看法,而不使用重定向? – Jez

3

注意,你其实可以“忽略“内容,如果你真的w蚂蚁。通常情况下,您在视图代码中编写了@RenderBody(),该代码评估正文内容,将其粘贴在HelperResult中,然后将其写入输出流。在这样做的时候,MVC标志着已经渲染过的物体。如果已经在代码上下文中,您可以欺骗它以认为已经呈现正文,但实际上并未通过编写@{ RenderBody(); }(注意大括号)或只是RenderBody();来编写任何内容。这会在不实际将其写入输出流的情况下评估主体内容。

相关问题