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

C# 从MVC控制器中的JsonResult方法返回JSON,c#,asp.net-mvc,telerik-mvc,jsonresult,C#,Asp.net Mvc,Telerik Mvc,Jsonresult,我正在尝试在测试ASP.NET MVC3应用程序中填充组合框(Telerik RAD ComboBox) 我在我的ASPX页面上定义了ComboBox,在控制器中定义了返回JsonResult的操作调用 我遇到的问题是,我正在使用的Web服务已经以JSON字符串的形式返回结果集。如何直接从Web服务传递响应 以下是代码片段: ASPX页面: <% Html.Telerik().ComboBox() .Name("cbRefTables")

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

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

我遇到的问题是,我正在使用的Web服务已经以JSON字符串的形式返回结果集。如何直接从Web服务传递响应

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

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

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


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

return Json(resultset, JsonRequestBehavior.AllowGet);

如果
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");
}

在这种情况下,您不想使用
JsonResult
Json()
帮助程序,因为这样会重新序列化Json。

单个Json方法:

返回Json(resultset)

它需要System.Web.HttpDLL,名称空间为System.Web.Http.Results


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

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

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

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

            var json = new JsonResult()
            {
                Data = dict
            };
var dict=新字典
{
{“name”,“Foobar”},
{“url”admin@foobar.com" }
};
var json=new JsonResult()
{
数据=dict
};

这是我最初遇到的问题,但是我遇到了以下错误:Microsoft JScript运行时错误:“Selected”为null或不是objectWell,该错误不是来自控制器。因此,您的问题在于如何处理JSON。最有可能的错误是来自组合框,它不知道默认选定项应该是什么。什么是使用引用?什么是使用引用?+用于包含DLL名称和命名空间。
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            var dict = new Dictionary<string, string>
            {
                { "name", "Foobar" },
                { "url", "admin@foobar.com" }
            };

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