@Html.RenderAction
應該做的工作,爲例外一個try/catch可以幫助你:
[ChildActionOnly]
public ActionResult Widget(int id) {
try
{
var widget = Repository.GetWidget(id);
return PartialView(widget);
}
catch
{
return PartialView("WidgetErrorPage");
}
}
UPDATE: 在這種情況下,你可以使用一個ActionFilter
來處理異常,喜歡這裏Return View from ActionFilter解釋或在這裏Returning a view with it's model from an ActionFilterAttribute:
public class WidGetHandleException : ActionFilterAttribute
{
protected override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new PartialViewResult
{
ViewName = "WidgetErrorPage",
ViewData = filterContext.Controller.ViewData,
TempData = filterContext.Controller.TempData,
};
}
}
再裝點這樣所有的小部件操作:
[ChildActionOnly]
[WidGetHandleException]
public ActionResult Widget()
{
}
謝謝。而不是在每一個行動中做,有沒有一種集中的方式來做這種異常處理和重定向? – 2013-02-23 11:53:28
我假設你將只使用一個Action來渲染基於ID的所有小部件,你也可以像這裏解釋的那樣設置自定義錯誤http://stackoverflow.com/questions/553922/custom-asp-net-mvc-404-錯誤頁面,但我不知道這將有助於你在這種情況下,AFAIK將呈現整頁錯誤,而不是部分頁面。 – JOBG 2013-02-24 00:16:08
我有很多小部件。我的網站主要由小部件組成。所以我會爲這些小部件提供很多操作方法 – 2013-02-24 05:17:50