从MVC控制器中的JsonResult方法返回JSON

时间:2011-05-05 16:53:31

标签: c# asp.net-mvc telerik-mvc jsonresult

我正在尝试在测试ASP.NET MVC3应用程序中填充ComboBox(Telerik RAD COmboBox)。

我在ASPX页面上定义了ComboBox,在控制器中我定义了返回JsonResult的动作调用。

我遇到的问题是我使用的Web服务已经将结果集作为JSON字符串返回。如何直接从Webservice传递响应。

以下是代码片段: ASPX页面:

<% Html.Telerik().ComboBox()
                       .Name("cbRefTables")
                       .DataBinding(b => b
                           .Ajax()
                           .Select("GetCALMdata","Common")                    
                       )
                       .Render();
                %>

控制器:名为CommomController

    public JsonResult GetCALMdata()
    {
        CALMwsP.wsCALMSoapClient wsC = new CALMwsP.wsCALMSoapClient("wsCALMSoap");
        string resultset = wsC.GetRefTables("P_1", "P_2", "P_3", "P_4");

        return ??; -- I want to return resultset which is already formatted. 
    }

5 个答案:

答案 0 :(得分:22)

如果使用ASP.NET MVC 2或更高版本:

return Json(resultset, JsonRequestBehavior.AllowGet);

答案 1 :(得分:15)

如果resultset字符串已经是JSON(并且没有包含在任何XML中),那么您需要返回一个ContentResult,其中包含该字符串作为内容:

public ContentResult GetCALMdata()
{
    CALMwsP.wsCALMSoapClient wsC = new CALMwsP.wsCALMSoapClient("wsCALMSoap");
    string resultset = wsC.GetRefTables("P_1", "P_2", "P_3", "P_4");

    return Content(resultset, "application/json");
}

在这种情况下,您不希望使用JsonResultJson()帮助程序,因为这最终会重新序列化您的JSON。

答案 2 :(得分:3)

如果我正确理解你应该使用Json()方法

return Json(resultset);

答案 3 :(得分:0)

个人Json方法:

return Json(resultset);

需要 System.Web.Http DLL,命名空间为 System.Web.Http.Results

enter image description here

或者网站范围将此行放在WebApiConfig.cs

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

答案 4 :(得分:0)

在MVC 5及以下版本中,您可以执行以下操作:

            var dict = new Dictionary<string, string>
            {
                { "name", "Foobar" },
                { "url", "admin@foobar.com" }
            };

            var json = new JsonResult()
            {
                Data = dict
            };