У меня есть фильтр действий, который отвечает за размещение некоторой общей информации в ViewBag для использования всеми представлениями в общем файле _Layout.cshtml.
public class ProductInfoFilterAttribute : ActionFilterAttribute
{
public override void
OnActionExecuting(ActionExecutingContext filterContext)
{
// build product info
// ... (code omitted)
dynamic viewBag = filterContext.Controller.ViewBag;
viewBag.ProductInfo = info;
}
}
В общем файле _Layout.cshtml яиспользуйте информацию, помещенную в ViewBag.
...
@ViewBag.ProductInfo.Name
...
Если при обработке действия контроллера возникает исключение, стандартный HandleErrorAttribute должен отображать мое общее представление Error.cshtml, и это работало до того, как я представил действиефильтр выше и начал использовать новые значения из ViewBag в _Layout.cshtml.Теперь я получаю стандартную страницу ошибок ASP.Net во время выполнения вместо моего пользовательского представления Error.cshtml.
Я проследил это до того факта, что при рендеринге представления ошибок возникает исключение RuntimeBinderException («Не удается выполнить время выполнения»привязка к пустой ссылке ") создается при использовании ViewBag.ProductInfo.Name в _Layout.cshtml.
Похоже, что даже мой фильтр действий успешно установил значение в ViewBag до того, как исходное исключение былоброшенный, новый контекст с пустым ViewBag используется при рендеринге моего представления Error.cshtml.
Есть ли какой-нибудь способ сделать данные, созданные фильтром действий, доступными для пользовательского представления ошибок?