2011-12-18 2 views
2

Я использую общий файл макета, настроенный в _ViewStart.cshtml, для большей части моего сайта. Что-то вдоль линий:Могу ли я предотвратить общий макет для использования для сообщений об ошибках?

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

Существует практически нет информации общего между большинством моего сайта, а также ошибки страниц отчетов. Как я могу различать эти две ситуации?

Я бы хотел, чтобы общий макет загружался для всех страниц, за исключением сообщений об ошибках.

ответ

2

вы можете изменить расположение на на странице/зрения основе

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

Это из моей страницы Post.vbhtml - я просто нужно изменить макет страницы, чтобы использовать другую схему.

+0

Я просто попробовал - я изменил директиву макета в верхней части моей страницы post.vbhtml, и это использовал другую страницу макета. –

+0

Эта опция обеспечивает решение, которое * выглядит * правильно, но * ведет себя неправильно. Я прошу конкретно не загружать общий вид. Не отображать его, поскольку конечный результат может быть полезен некоторое время, но не подходит для тонких (и очень важных) способов для моего использования. – blueberryfields

1

Для завершения данного вопроса, у вас есть популярное, иногда неправильное решение. Выбирайте с осторожностью, используйте принятый ответ, если не уверены.


Есть тонкие и иногда важные различия между принял ответ и популярной альтернативой ниже. Альтернатива ниже приводит к результат, который выглядит редко в большинстве случаев, но не всегда работает. Это, по-видимому, связано с порядком загрузки и исполнением файлов представления - сначала загружается и выполняется первое верхнее общее представление. Если этот первый процесс загрузки + выполнения имеет побочные эффекты, это решение будет нарушаться странными и важными способами.

_ ViewStart.cshtml

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

Поручить соответствующие взгляды не использовать макет, добавив следующую строку в верхней части окна просмотра файлов:

ErrorView.cshtml

@{ 
    Layout = ""; 
}