2012-11-14 25 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がtrueの場合ということですその後、RenderBody()は呼び出されませんし、私は例外を取得:「RenderBody」方法は、レイアウトページの

と呼ばれていなかった...

だから私が得ることができる方法はありこれをラウンド?私はちょうど私のレイアウトページからいくつかの出力をレンダリングしたいと何も私のビューページから。

答えて

-3

が、それだけで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

レンダリングビューにはマスターレイアウトを残し、サイトをシャットダウンした場合はビューを短絡しないでください。

あなたが最善の策は、これをチェックし、Global.asaxの中でそれを処理、すなわちBeginRequestにすることですね。私はJeradローズのソリューションにかなり似たものに行くことにした最終的には

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

リダイレクトを使わずに「サイトシャットダウン」ビューを表示する方法はありますか? – Jez

3

注意"あなたが本当にwならコンテンツアリに。通常、ボディコンテンツを評価し、HelperResultに貼り付け、出力ストリームに書き込むビューコードに@RenderBody()を書きます。そうすることで、MVCはボディがレンダリングされたものとしてマークします。 @{ RenderBody(); }(中カッコに気づく)を書くことで、実際に何も書かなくてもボディがレンダリングされたと思うようにするか、すでにコードコンテキストにある場合はRenderBody();とすることができます。これは実際に出力ストリームに書き込まずに本文のコンテンツを評価します。

関連する問題