ASP.NET MVC 4 - 门户网站
问题描述:
我是MVC4的新手,请耐心等待。我正在构建一个门户,用户将看到不同的小部件。让我们只是说小部件是一些带有标题和内容的矩形框。什么是更好的实现方式?我打算使用部分视图。然后在集合视图上调用Html.renderaction。这是一个不错的选择,还是有更好的方法来做到这一点?ASP.NET MVC 4 - 门户网站
2.)另外,当小部件遇到任何异常时,我只想在小部件区域显示自定义错误消息。我不希望整个页面被重定向到错误页面。仅仅是矩形区域。
答
@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