返回JSON时从Controller.View(对象模型)修改ActionResult

时间:2012-02-20 17:50:42

标签: asp.net-mvc json asp.net-mvc-3 security telerik-mvc

简短版本:

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

长版:

我需要在任意字符串(Unparsable Curft)前面添加我的JSON结果。

我不确定的是如何修改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
  • 通过return View(someObject)方法将字符串添加到我的JSON数据的最佳方法是什么?

理想情况下,为每个相关方法添加属性可能是最好的方法,但是一旦我理解了如何修改JSON结果,我就可以通过反射来处理它。

1 个答案:

答案 0 :(得分: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;
    }