Ajax对webmethod的调用给出了ERROR 500

时间:2017-11-23 21:43:09

标签: javascript c# jquery asp.net ajax

我是初学者,我想使用ajax将一些数据从数据库加载到下拉列表中,当另一个下拉列表选择索引时更改 但我得到的只是500错误 我的jquery ajax代码

 function ddlGroups() {
        var s = $("#Content_ddlGroups").find("option:selected").prop("value");

        $.ajax({
            method: "GET",
            contentType: "application/json; charset=utf-8",
            //url is the path of our web method (Page name/function name)
            url: "../panels/admin/AddProject.aspx/getSubgroups",
            data: { Id: s },
            dataType: "json",
            //called on jquery ajax call success
            success: function (result) {
                $('#Content_SubGroups').empty();

                $.each(result.d, function (key, value) {
                    $("#Content_ddlGroups").append($("<option></option>").val(value.GroupID).html(value.Title));

                });

            },
            //called on jquery ajax call failure
            error: function ajaxError(result) {
                alert(result.status + ' : ' + result.statusText);
            }
        });
    };

和我的c#代码

 [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public static List<Group> getSubgroups(string Id)
    {
        DataTable dt = new DataTable();
        List<Group> objDept = new List<Group>();
        GroupsRepository jg = new GroupsRepository();
        //Page page = (Page)HttpContext.Current.Handler;
        //DropDownList DDLGroups = (DropDownList)page.FindControl("DDLGroups");

        dt = jg.LoadSubGroup(Id.ToInt());
        if (dt.Rows.Count > 0)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                objDept.Add(new Group
                {
                    GroupID = Convert.ToInt32(dt.Rows[i][0]),
                    Title = dt.Rows[i][1].ToString(),
                });
            }
        }
        return objDept;
    }

问题是什么?

2 个答案:

答案 0 :(得分:0)

jQuery不是问题。服务器抛出了500错误,因此您应该查看c#代码的日志以找出有关它的详细信息,并能够缩小原因。

答案 1 :(得分:0)

在您的AJAX调用中实际上500错误导致您已经通过了 Id:s而不是Id有一些数字。防爆。 Id:5。

如果您在服务器端方法中传递字符串作为id,我会看到您的代码 你试图将该字符串转换为int。这实际上导致500错误。

[WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public static List<Group> getSubgroups(string Id)
    {
        DataTable dt = new DataTable();
        List<Group> objDept = new List<Group>();
        GroupsRepository jg = new GroupsRepository();
        //Page page = (Page)HttpContext.Current.Handler;
        //DropDownList DDLGroups = (DropDownList)page.FindControl("DDLGroups");

        dt = jg.LoadSubGroup(Id.ToInt()); // Here You have convert string to Int that's why you got 500 Error.

        if (dt.Rows.Count > 0)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                objDept.Add(new Group
                {
                    GroupID = Convert.ToInt32(dt.Rows[i][0]),
                    Title = dt.Rows[i][1].ToString(),
                });
            }
        }
        return objDept;
    }