【问题标题】:Sending JSON string to my backend code to add it to my DB but it's not adding anything将 JSON 字符串发送到我的后端代码以将其添加到我的数据库中,但它没有添加任何内容
【发布时间】:2018-12-02 05:15:49
【问题描述】:

我已经被这个问题困扰了很久

我正在尝试通过 jQuery/AJAX 将对象添加到我的数据库中。显然,没有错误,但它没有向我的数据库添加任何内容。

这是我的 JS/JQuery 代码:

var student = new Object();
student.Name = $("#txtNameAdd").val();
student.Age = $("#txtAgeAdd").val();
student.Email = $("#txtEmailAdd").val();

$.ajax({
    type: "POST",
    url: "Default.aspx/AddStudent",
    data: "{'studentJSONString':'" + JSON.stringify(student) + "'}",
    success: function (response) {
        $("#lblSuccessAdd").text("Success!");
        $("#lblSuccessAdd").css("display", "block");
    },
    error: function (response) {
        alert(response.responseJSON);
    }
});

我的 JS 代码指向我在 Default.aspx 页面代码中的这段代码:

    [WebMethod]
    public static void AddStudent(string studentJSONString)
    {
        JavaScriptSerializer converter = new JavaScriptSerializer();
        Student a = converter.Deserialize<Student>(studentJSONString);
        WebMethods.AddStudent(a);
    }

在我的 WebMethods.cs 类中指向此代码

    [WebMethod]
    public static void AddStudent(Student student)
    {
        MasterStudent master = new MasterStudent();
        master.AddStudent(student);
    }

最后进入我的类库并在 MasterStudent 中使用此方法结束:

    public void AddStudent(Student student)
    {
        if (string.IsNullOrWhiteSpace(student.Name))
        {
            throw new Exception("There's no name");
        }
        if (string.IsNullOrWhiteSpace(student.Email))
        {
            throw new Exception("There's no email");
        }

        using (studentEntities model = new studentEntities())
        {
            model.student.Add(student);
            model.SaveChanges();
        }
    }

我运行代码,控制台没有记录任何问题,但它也没有做任何事情。

我在 Forms 应用程序上运行了非常相似的代码,没有任何问题,所以我现在有点陷入困境。有谁知道为什么它总是失败?

【问题讨论】:

  • 不要在问题内回答你的问题。我们为此提供了答案。

标签: javascript c# asp.net json ajax


【解决方案1】:
var student = new Object();
student.Name = $("#txtNameAdd").val();
student.Age = $("#txtAgeAdd").val();
student.Email = $("#txtEmailAdd").val();

$.ajax({
    type: "POST",
    url: "Default.aspx/AddStudent",
    data: student,
    success: function (response) {
        $("#lblSuccessAdd").text("Success!");
        $("#lblSuccessAdd").css("display", "block");
    },
    error: function (response) {
        alert(response.responseJSON);
    }
});

然后你可以指向这个WebMethod。

[WebMethod]
public static void AddStudent(Student student)
{
    MasterStudent master = new MasterStudent();
    master.AddStudent(student);
}

试试这个。

【讨论】:

  • 您可以解释他们做错了什么以及您的代码如何解决问题。您也可以使用四个空格来使代码呈现为一个块。
【解决方案2】:

所以我在发布问题后不久确实找到了解决方案,我将 JQuery AJAX 调用更改为如下所示:

    $.ajax({
    type: "POST",
    url: "Default.aspx/AddStudent",
    data: "{'studentJSONString':'" + JSON.stringify(student) + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        $("#lblSuccessAdd").text("Success!");
        $("#lblSuccessAdd").css("display", "block");
    },
    error: function (response) {
        $("#lblErrorAdd").text(response.responseJSON.Message);
        $("#lblErrorAdd").css("display", "block");
    }
});

它现在确实有效!所以无论是 dataType 还是 contentType 对于我想要做的事情都非常重要

谢谢大家的回答

【讨论】:

    【解决方案3】:

    您是否尝试过为其附加调试器并在 model.SaveChanges() 之前验证学生对象不为空?

    首先尝试调试并验证学生字符串是否正在转换为实际的学生对象。

    如果是,则尝试分析数据库并验证发出的任何命令。

    【讨论】:

    • 我尝试在我的代码中运行断点,但我刚刚意识到一些非常奇怪的事情,我有一个可以工作的 AJAX 代码,它确实激活了我的断点,但是我的 add 方法没有激活任何东西,所以有些东西是这里绝对错了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2019-02-20
    • 2020-10-15
    • 2016-04-14
    • 1970-01-01
    • 2022-12-14
    • 2016-07-19
    相关资源
    最近更新 更多