エラーメッセージのために共有レイアウトが使用されないようにすることはできますか?

私は_ViewStart.cshtmlに設定された共有レイアウトファイルを使用しています。次の行に沿った何か:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

私のサイトの大半とエラー報告ページとの間に情報がほとんどまたはまったく共有されていません。どのように2つの状況を区別しますか?

私は共有レイアウトがすべてのページのためにロードされるようにしたいと思います。

2

2 答え

ページ/ビュー単位でレイアウトを変更することができます

@{
  var model = ViewContext.Controller.ViewData.Model;
  if (model is System.Web.Mvc.HandleErrorInfo) {
    Layout = "";
  } else {
    Layout = "~/Views/Shared/_Layout.cshtml"; 
  }
}

これは私のPost.vbhtmlページからのものです - 私はちょうど別のレイアウトを使用するレイアウトページを変更する必要があります。

2
追加された
そのオプションは、見た目の正しい解決策を提供しますが、誤って動作します。共有ビューの読み込みを特に避けるように求めています。最終結果としてそれを表示しないことは時間の中では有用かもしれませんが、私の使用事例には微妙な(そして非常に重要な)方法では失敗します。
追加された 著者 blueberryfields,
私はちょうどそれを試みた - 私は私のpost.vbhtmlページの上にレイアウトディレクティブを変更し、別のレイアウトページを使用しました。
追加された 著者 Ashok Padmanabhan,

完了のために、この質問には人気があり、時には不適切な解決策があります。慎重に選択し、不確かな場合は受け入れられた回答を使用してください


受け入れられた回答一般的な代替の間に微妙な重要な違い >。以下の代替手段は、ほとんどの場合正しく見えますが、必ずしも機能しない結果につながります。これは、ロード・オーダーとビュー・ファイルの実行によるものです。最上位の共有ビューが最初にロードされて実行されます。最初のロード+実行プロセスに副作用がある場合、このソリューションは奇妙で重要な方法で壊れます。

_ ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

ビューファイルの上部に以下を追加して、レイアウトを使用しないように適切なビューを指示します。

ErrorView.cshtml

@{
    Layout = "";
}
1
追加された