【问题标题】:ASP.NET MVC 4 - Portal siteASP.NET MVC 4 - 门户网站
【发布时间】:2013-02-23 07:29:03
【问题描述】:

我是 MVC4 的新手,请多多包涵。我正在构建一个门户网站,用户将在其中看到不同的小部件。让我们说小部件是一些带有标题和内容的矩形框。有什么更好的方法来实现这一点?我打算使用部分视图。然后在聚合视图上调用 Html.renderaction。这是一个好的选择还是有更好的方法?

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

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

    【讨论】:

    • 谢谢。有没有一种集中的方式来进行异常处理和重定向,而不是在每个操作中都执行?
    • 我假设您将只使用一个操作来基于 id 呈现所有小部件,您还可以设置自定义错误,如此处 stackoverflow.com/questions/553922/… 中解释的那样,但我不确定在这种情况下是否会对您有所帮助,将呈现整页错误而不是部分页面的 AFAIK。
    • 我有很多小部件。我的网站主要仅由小部件组成。所以我将为这些小部件提供很多操作方法
    • ActionFilter替代的更新答案
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多