【发布时间】:2013-02-23 07:29:03
【问题描述】:
我是 MVC4 的新手,请多多包涵。我正在构建一个门户网站,用户将在其中看到不同的小部件。让我们说小部件是一些带有标题和内容的矩形框。有什么更好的方法来实现这一点?我打算使用部分视图。然后在聚合视图上调用 Html.renderaction。这是一个好的选择还是有更好的方法?
2.)此外,当小部件遇到任何异常时,我想仅在小部件区域显示自定义错误消息。我不希望将整个页面重定向到错误页面。只是矩形区域。
【问题讨论】:
我是 MVC4 的新手,请多多包涵。我正在构建一个门户网站,用户将在其中看到不同的小部件。让我们说小部件是一些带有标题和内容的矩形框。有什么更好的方法来实现这一点?我打算使用部分视图。然后在聚合视图上调用 Html.renderaction。这是一个好的选择还是有更好的方法?
2.)此外,当小部件遇到任何异常时,我想仅在小部件区域显示自定义错误消息。我不希望将整个页面重定向到错误页面。只是矩形区域。
【问题讨论】:
@Html.RenderAction 应该完成这项工作,对于异常情况,try/catch 可以帮助您:
[ChildActionOnly]
public ActionResult Widget(int id) {
try
{
var widget = Repository.GetWidget(id);
return PartialView(widget);
}
catch
{
return PartialView("WidgetErrorPage");
}
}
更新:
在这种情况下,您可以使用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()
{
}
【讨论】:
ActionFilter替代的更新答案