2013-02-23 205 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