如何从C#WebMethod获取数据作为字典<>并使用jquery ajax显示响应?

时间:2016-05-11 12:15:56

标签: jquery asp.net ajax webmethod

以下是我想要返回的返回类型Dictionary<ReportID, ReportDatail> 其中类的结构为:

Class ReportDetail
{
    ReportID,
    ReportName,
    ReportShortName,
    List<ReportFields>
}

Class ReportFields
{
    SystemName,
    DBName,
    DataType,
    MaxLength,
    DefaultValue
}

我不知道如何将该回复作为字典返回。

function GetReportsDetails(AccoutType) {
    $.ajax({
    type: "POST",
    url: '<%= ResolveUrl("~/Web/ReportPosition.aspx/GetReportDetail") %>',
        contentType: "application/json; charset=utf-8",
        datatype: 'json',
        data: JSON.stringify({SelectedAccount: AccoutType}),
        success: function (data) {
        alert(data.d);
        },
        error: function (xhr, status, error) {
            alert('XHR: ' + xhr.responseText + '\nStatus: ' + status + '\nError: ' + error);
        }
});

[WebMethod]
public static string GetReportDetail(string AccoutItem)
{
    return "Response from WebMethod..!";
    //What type of code I've to write here to return "Dictionary<ReportID, ReportDatail>" 

}

在上面的web方法中,我只返回字符串而不是字典作为响应,但仍然会收到错误: Type \u0027System.String\u0027 is not supported for deserialization of an array.

如何将数据传递到WebMethod并将处理响应作为字典从WebMethod

返回

2 个答案:

答案 0 :(得分:1)

  

输入&#34; System.String&#34;不支持反序列化数组。

我不清楚为什么此代码会提供此错误消息。但无论如何,您可以简化一些序列化。由于该方法只是期望一个字符串,所以只给它一个带有预期参数名称的字符串作为键。我将假设您的JavaScript代码中的AccountType是一个字符串:

data: { AccountItem: AccountType }
  

我不知道如何返回词典&lt;&gt; respose

同样的方式,你可以返回任何东西。因此,例如,如果您想要返回Dictionary<int, ReportDetail>,则可以执行此操作:

[WebMethod]
public static Dictionary<int, ReportDetail> GetReportDetail(string AccoutItem)
{
    return new Dictionary<int, ReportDetail>();
}

至于如何使用实际数据 填充该对象(而不仅仅是返回一个空字典),这完全取决于您。

  

并使用jquery处理

返回实际数据时,请使用浏览器的调试工具检查JSON响应的结构。它实际上只是一个对象数组。您可以像其他任何对象一样遍历它,检查对象的属性等。

success: function (data) {
    for (var i = 0; i < data.length; i++) {
        // do something with data[i]
    }
}

答案 1 :(得分:0)

试试这个:

定义要发送的类类型:

public class DataAccountItem
{
    public string SelectedAccount { get; set; }
}

[WebMethod]中你需要传递这个类:

    [WebMethod]
public static string GetReportDetail(DataAccountItem myItem)
{
    return "Response from WebMethod..!";
    //What type of code I've to write here to return "Dictionary<ReportID, ReportDatail>" 

}