У меня есть действие, которое возвращает PartialView:Как правильно обрабатывать исключения ребенка действий
[ChildActionOnly]
public ActionResult TabInfo(int id, string tab)
{
ViewBag.Jobid = id;
ViewBag.Tab = tab;
var viewModel = _viewModelManager.GetViewModel(tab, id);
return
PartialView(string.Format("~/Views/{0}/Index.cshtml", tab), viewModel);
}
_viewModelManager
возвращает вид из словаря. Если пользователь запрашивает вкладку, которая не exsist то KeyNotFound
будет сгенерировано исключение, однако, на мой взгляд, я получаю следующее исключение:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'
@using MyApplication.UI.Helpers.Html
@model MyApplication.UI.Models.MyJobModel
@{
ViewBag.Title = "Details";
}
<p>@Model.Blah</p>
...
*@ HttpException occurs here -- renders default error view *@
@Html.Action("TabInfo", new { id = ViewBag.Jobid, tab = ViewBag.Tab })
HandleErrorAttribute атрибут по методу дочернего действия игнорируется, если в самом дочернем действии возникает исключение. Поэтому дочернее действие должно обрабатывать собственные исключения. Если дочернее действие имеет атрибут AuthorizeAttribute, атрибут будет выполняться и возвращать код состояния Unauthorized 401 HTTP.
Я не могу использовать этот [HandleError(ExceptionType = typeof(KeyNotFoundException), View="myError")]
, и я не могу перенаправлять с помощью try/catch либо потому, что перенаправления для дочерних действий не поддерживаются.
Каков наилучший способ обработки дочерних исключений?
Bottomline: Я хочу обработать исключение и вернуть страницу пользовательской ошибки.
Ну метод возвращает ViewModel базового типа, который я создал, так что я не смогу вернуть вид - я думаю, я бы бросить ошибку и пусть атрибут HandleError позаботится. Любая идея, почему атрибут HandleError не возвращает мое собственное представление об ошибке? – Rich
Ah okay, HandleError не возвращает его локально? По умолчанию HandleError ничего не делает при запуске под локальным сервером разработки. Цель состоит в том, чтобы показать разработчикам более полезную информацию – mattytommo
+1 для просмотра и предоставления ответа. Можете ли вы подтвердить обновление моего вопроса и обновить свой ответ или дать мне знать, как я могу устранить неполадки? – Rich