2012-02-20 48 views
1

簡版:當返回JSON時,從Controller.View(對象模型)修改ActionResult

System.Web.MVC.Controller.View(object)如何工作?

龍版本:

我需要預先設置我的JSON結果與任意字符串(Unparsable Curft)。

我不確定的是我如何修改ASP.NET MVC「管道」中的ViewResult。我已閱讀關於此主題的MSDN docs,但我仍不清楚如何處理此問題。

  • 在這種情況下,View(Object)如何返回JSON字符串?

控制器樣品

[GridAction] 
    public ActionResult _SelectBatchEditingGrid(int? id) 
    { 
     // GridModel is of type IEnumerable if that matters. 
     // More info on the GridModel type see: http://www.telerik.com/help/aspnet-mvc/t_telerik_web_mvc_gridmodel_1.html 

     return View(new GridModel(SessionProductRepository.All()) 
    } 

查看樣品

<% Html.Telerik().ScriptRegistrar() 
      .OnDocumentReady(() => 
      {%> 
      /* Protect from setter-property hacks; see https://stackoverflow.com/a/3147804/328397 */ 
      $.ajaxSetup({ 
    converters: { 
     "text cleanedjson": function(data) { 
      var jsonString = data.replace("throw 1; <dont be evil> ", ""); 
      return $.parseJSON(jsonString); 
       } // End function 
      } // end conveter 
}); // end ajaxsetup 
  • 什麼是前面加上一個字符串,我的JSON數據的最佳方式,通過return View(someObject)方法?

理想情況下,爲每個相關方法添加一個屬性可能是最好的方法,但是我可以通過反射處理這個問題,一旦我瞭解瞭如何修改JSON結果。

回答

0

JSON只是一個字符串,因此您可以在返回之前以任何方式操縱它。不知道什麼是請求JSON,但如果它只是使用類似JQuery Post的AJAX類型請求,則可以在控制器中執行類似操作。您不必在您的操作方法中返回視圖。

[HttpPost] 
    public string GetSomeJson() 
    { 
     MyObject mo = new MyObject(); 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     string json = serializer.Serialize(mo); 
     string unparsableJson = unparsableString + json; 
     return unparsableJson; 
    } 
+0

使用字符串很簡單...但是我正在使用的應用程序具有'public ActionResult ReturnSomeJSON'方法簽名。通過向Controller.View(Object)發送一個[Telerik GridModel ](http://www.telerik.com/help/aspnet-mvc/t_telerik_web_mvc_gridmodel_1.html)類來返回數據, 'IEnumerable'到'ActionResult'中。我很確定'ToString()'在我的情況下沒有被調用。在這種情況下,MVC的視圖如何將視圖(對象)轉換爲JSON字符串的ActionResult? – LamonteCristo 2012-02-20 19:51:46

+0

不知道我理解你的問題。顯示控制器和視圖的一些相關代碼將有所幫助。 – 2012-02-20 20:10:10

+0

根據您的請求更新 – LamonteCristo 2012-02-20 20:13:45