2013-02-23 107 views
2

我是MVC4的新手,请耐心等待。我正在构建一个门户,用户将看到不同的小部件。让我们只是说小部件是一些带有标题和内容的矩形框。什么是更好的实现方式?我打算使用部分视图。然后在集合视图上调用Html.renderaction。这是一个不错的选择,还是有更好的方法来做到这一点?ASP.NET MVC 4 - 门户网站

2.)另外,当小部件遇到任何异常时,我只想在小部件区域显示自定义错误消息。我不希望整个页面被重定向到错误页面。仅仅是矩形区域。

回答

1

@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() 
{ 

} 
+0

谢谢。而不是在每一个行动中做,有没有一种集中的方式来做这种异常处理和重定向? – 2013-02-23 11:53:28

+0

我假设你将只使用一个Action来渲染基于ID的所有小部件,你也可以像这里解释的那样设置自定义错误http://stackoverflow.com/questions/553922/custom-asp-net-mvc-404-错误页面,但我不知道这将有助于你在这种情况下,AFAIK将呈现整页错误,而不是部分页面。 – JOBG 2013-02-24 00:16:08

+0

我有很多小部件。我的网站主要由小部件组成。所以我会为这些小部件提供很多操作方法 – 2013-02-24 05:17:50