-4

C#コードでJQuery Ajax関数とWebMethodを使用して、Ajax経由でデータベースにデータを送信しようとしています。しかし、それは機能していません。何か案は?

$(function() {
    $('#Add').click(function() {
        var $dialog = $('<div id="MyDialog"></div').appendTo('body')
            .load("../Pop-up.aspx #pop-up", createDatePicker)
            .dialog({
                position: 'center',
                width: 550,
                buttons: {
                    "OK": function() {
                        var jname = $('#name').val();
                        var jbirthday = $('#datepicker').val();
                        var jgender = $('input:radio[name=Gender]:checked').val();
                        var jcourseId = $('#DropDownList1').val();
                        var myjson = {
                            name: jname,
                            birthday: jbirthday,
                            gender: jgender,
                            courseId: jcourseId
                        };

                        $.ajax({
                            type: "post",
                            contentType: "application/json;charset=utf-8",
                            dataType: "json",
                            url: "Manage.aspx/AddStudent",
                            data: $.toJSON(myjson)
                        });
                    },
                    "Cancel": function() {
                        $(this).dialog('close');
                    }
                }
            });
        return false;
    });

});

これが私のWebメソッドです

      [WebMethod]
      public static void AddStudent(string birthday,string name,string gender,string courseId)
      {
        var repository = new StudentRepository();
        var student = new Student
                            {
                                Birthday = Convert.ToDateTime(birthday),
                                Name = name,
                                Gender = gender,
                                Course_ID = Convert.ToInt32(courseId)
                            };
        repository.InsertStudent(student);
            repository.Save();
      }
4

2 に答える 2

0

JSON オブジェクトのプロパティの順序を変更して、Web メソッドのパラメーターと一致するようにしてください。

    var myjson = {
       birthday: jbirthday, //now the properties match the parameters
       name: jname,
       gender: jgender,
       courseId: jcourseId
    };

    public static void AddStudent(string birthday, string name, string gender, 
        string courseId)
    { ... }

すべてのパラメーターが文字列型であるにもかかわらず、ASP.NET が逆シリアル化された JSON オブジェクトに一致するメソッド シグネチャを見つけることができないため、500 エラーが表示されていると思います。

アップデート

最初に提案したことをテストする機会がありましたが、プロパティの順序は問題ではありませんでした。

これが役立つかどうかはわかりませんが、次の場合に 500 エラーが発生しました。

  • JSON オブジェクトのプロパティが、WebMethod のすべてのパラメーターと一致しませんでした

    var myjson = {b: 'test1', c: 'test' };
    
    [System.Web.Services.WebMethod]
    public static void TestMethod(string a, string b)
    { 
        //does nothing.
    }
    
  • 渡していたパラメーターの 1 つが未定義でした。

    var myjson = {a: undefined, b: 'test' };
    
    [System.Web.Services.WebMethod]
    public static void TestMethod(string a, string b)
    { 
        //does nothing.
    }
    
于 2012-05-08T03:38:04.857 に答える
0

これを試して:

data: JSON.stringify(myjson)

それ以外の:

data: $.toJSON(myjson)
于 2013-10-22T14:35:45.440 に答える