调用Web方法的Ajax错误

时间:2018-03-13 20:04:31

标签: c# jquery ajax

我正在尝试根据下拉列表选择更改在Bootstrap日期时间选择器中设置日期。我使用Web方法(C#)返回“开始日期”给出“证书ID”。

我尝试使用“text”数据类型而不是“json”但继续获取“无法将System.String类型的对象转换为类型System.Collections.Generic.IDictionary”

我搜索了此错误类型,找不到可以解决此问题的内容。

$("#ddlCertificate").change(function () {
    ....
    debugger
    setStartDate($("#ddlCertificate").val());
});

function setStartDate(certItemID) {
    var param = JSON.stringify(certItemID, null, 2);
    $.ajax({
        type: "POST",
        dataType: "text",
        contentType: "application/json; charset=utf-8",
        url: "../services/easg.asmx/GetCertItemStartDate",
        cache: false,
        data: param,
    }).done(function (result) {debugger
        $("#tbStartDate").val(result.d);
    }).fail(function (jqXHR, textStatus, errorThrown) {debugger
        alert(textStatus + ' - ' + errorThrown);
    });
}

网络方法:

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]

public string GetCertItemStartDate(string certID)
{
    int iCertItemID = int.Parse(certID);
    DateTime dtStartDate = CertItem.GetCertItemStartDate(iCertItemID);
    string JSONresult;
    JSONresult = JsonConvert.SerializeObject(dtStartDate);
    return JSONresult;
}

1 个答案:

答案 0 :(得分:0)

问题在于参数的传递方式。在ajax电话中,我有:

data: param,

并且必须将其更改为:

$("#ddlCertificate").change(function () {
    ....
    var certID = "{ 'certID': '" + $('#ddlCertificate').val() + "'}";
    setStartDate(certID);
});

function setStartDate(certItemID) {
    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        url: "../services/easg.asmx/GetCertItemStartDate",
        cache: false,
        data: certItemID,
    }).done(function (result) {
        var startDate = JSON.parse(result.d);
        setStartDate(new Date(startDate));
    }).fail(function (jqXHR, textStatus, errorThrown) {
        alert(textStatus + ' - ' + errorThrown);
    });
}