2012-11-14 52 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();來編寫任何內容。這會在不實際將其寫入輸出流的情況下評估主體內容。

相關問題