2009-11-23 94 views
0

我發現自己需要從控制器操作中將各種JSON結果返回給客戶端。我已經創建了ContentResult類型的靜態「輔助」方法。我希望能夠在多個項目中重用這些助手,所以我已經在他們自己的課堂上創建了這些助手,並且不久之後我會將它們移到自己的程序集中。ASP.NET MVC結果返回助手

這是我的問題:這些返回幫助器中的一些需要訪問控制器上下文,所以我創建了作爲控制器上的擴展方法。我喜歡Html Helper方法是HtmlHelper類的擴展方法,但我找不到類似於View類的Html屬性的合適的控制器屬性,所以我只是擴展了控制器。 以下是返回幫助程序的代碼。我想知道是否有更好的方法來做到這一點。

public static ContentResult AJAXRedirect(this Controller cont, string action, 
     string controller, object routeValues) 
    { 
     string url = cont.Url.Action(action, controller, routeValues); 
     string json = "{{\"redirect\": \"{0}\" }}"; 
     json = string.Format(json, url); 
     return new ContentResult 
     { 
      Content = json, 
      ContentType = "text/x-json", 
      ContentEncoding = Encoding.UTF8 
     }; 
    } 
+5

使用JsonResult而不是ContentResult – 2009-11-23 14:29:46

回答

2

您可以使用此代碼:

string url = cont.Url.Action(action, controller, routeValues); 
return Json(new { redirect : url }); 

擴展的控制器似乎是不錯的方法。 Content(),View(),Json(),Empty()方法也是Controller的擴展。你正在添加你自己的。

編輯

對不起,我其實是錯的擴展方法。它們不是擴展方法。因此,如果您使用自己的基本Controller類和其他方法,會更好。既然你會在你的類中使用這些方法,繼承是最好的解決方案。你仍然可以在項目之間分享這個類。

+0

如果它們是控制器上的擴展並且我的控制器也是這樣,那麼爲什麼我必須調用我的:this.AJAXRedirect(),但是我不必將其與其他控件一起使用? – 2009-11-23 14:46:06

+0

@LukLed,我確實有一個基礎控制器類,但是很多項目特定的東西最終都會進入它,所以在項目之間共享它是不現實的。儘管我在某處閱讀了有關結果助手的正式方法,但我現在找不到它。 – 2009-11-23 16:02:27

+1

@Josh Pearce:你不必使用一個基礎控制器類。您可以爲每個項目創建一個項目,從中繼承,併爲特定項目創建另一個獨立項目。 – LukLed 2009-11-23 16:12:59