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
Dictionary からビューを返します。ユーザーが存在しないタブを要求すると、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 属性が適用されている場合、属性が実行され、HTTP Unauthorized 401 ステータス コードが返されます。
子アクションのリダイレクトがサポートされていないため、これ[HandleError(ExceptionType = typeof(KeyNotFoundException), View="myError")]
を使用できず、try/catch を使用してリダイレクトすることもできません。
子アクションの例外を処理する最良の方法は何ですか?
結論: 例外を処理してカスタム エラー ページを返したい。