Я использую пользовательские ошибки (web.config
) для отправки необработанных исключений в мой ErrorController
.TempData пуст, когда установлен в блоке catch, и мы восстанавливаем
В моем основном контроллере я бросаю исключение, перехватываю его в блоке catch
и устанавливаю TempData
, чтобы иметь какое-то удобное сообщение. Затем я затем throw
, который затем отправляется на адрес ErrorController
.
Когда я проверяю TempData
здесь, он пуст (как и Session
, но это было бы, не так ли?).
Я уверен, что он не должен быть пустым, и это правильный способ отправки данных между контроллерами ... но он не работает! Я ошибаюсь в своем понимании?
HomeController
:
catch (Exception ex)
{
TempData["MsgForUser"] = "useful message to show";
// Do some logging...
throw;
}
ErrorController
:
public ActionResult DisplayError(int id)
{
ViewBag.MsgForUser = TempData["MsgForUser"];
return View();
}
Web.config
:
<system.web>
<customErrors mode="On" defaultRedirect="~/ErrorPage/DisplayError">
<error redirect="~/Error/DisplayError/403" statusCode="403" />
<error redirect="~/Error/DisplayError/404" statusCode="404" />
<error redirect="~/Error/DisplayError/500" statusCode="500" />
</customErrors>
@ScottWeldon Его просто мои предпочтения, но заголовки из кода (ErrorController, Web.config) Безразлично «нужно быть внутри кодового блока, он просто выглядит немного, но странно. – jmattheis