У меня есть фильтр действий, который отвечает за размещение некоторой общей информации в 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.
Есть ли способ получить данные, созданные фильтром действий, для доступа к пользовательскому представлению об ошибках?