在ajax post问题中传递数据

时间:2021-06-19 21:30:32

Scenario :

场景:

Need to pass an object which contains a list of sub objects to the controller.

需要将包含子对象列表的对象传递给控制器。

Issue :

问题:

I'm able to get the object's value but not the value of list of sub objects inside the object.

我可以得到对象的值,但不能得到对象内部的子对象列表的值。

Code :

代码:

index.cshtml

index.cshtml

function sendData() {
    var student = {
        Id: 1,
        Name: "xxx",
        Marks: [{
            Subject: "Maths",
            Mark:80
        },
        {
            Subject: "Science",
            Mark: 75
        }]
    }
    $.ajax({
        url: '@Url.Action("Receive", "Home")',
        data: student,
        success: function (data) {
            alert("done");
        },
        error: function (error) {
            alert('error For details refer console log');
            console.log(error);
        }
    });
}

HomeController.cs

HomeController.cs

public ActionResult Receive(Student student)
    {
        ViewBag.Message = "Your contact page.";
        return View();
    }

Student.cs

Student.cs

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Marks> Marks { get; set; }
}
public class Marks
{
    public string Subject { get; set; }
    public decimal Mark { get; set; }
}

Screenshot:

截图:

Chrome debugger shows all the data were set.

Chrome调试器显示所有数据都已设置。

在ajax post问题中传递数据

but in controller i'm not getting the value of Marks

但是在控制器中我没有得到标记的值

在ajax post问题中传递数据

Any help would be appreciated. Thank you.

如有任何帮助,我们将不胜感激。谢谢你!

1 个解决方案

#1


5  

You need to stringify the data, and set the contentType and type ajax options (note that it needs to be a POST, otherwise you need to generate your data in a different way using fully qualified property names with dot notation - for example { Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 80, ... }, in which case its your existing ajax code will work without modification)

函数需要把数据,并设置contentType和类型ajax选项(请注意,它需要一个帖子,否则您需要生成数据以不同的方式使用完全限定的属性名和点符号——例如{ Id:1、....”,标志着[0]。主题”:“数学”、“标志[0]。马克:80,……},在这种情况下,您现有的ajax代码将不需要修改就可以工作)

var student = {
    ....
};

$.ajax({
    url: '@Url.Action("Receive", "Home")',
    data: JSON.stringify({ student: student }, // stringify
    type: 'POST', // add
    contentType: "application/json; charset=utf-8", //add
    success: function (data) {
        alert("done");
    },
    ....
});

Note that you method is returning a view, but you not doing anything with that view. If your intention is to update the DOM with that view, then the method should be return PartialView( ... ); and in the ajax success callback,

注意,您的方法正在返回一个视图,但是您没有对该视图做任何操作。如果您打算用该视图更新DOM,那么方法应该返回PartialView(…);在ajax success回调中,

success: function (data) {
    $(someElement).html(data);
},

#1


5  

You need to stringify the data, and set the contentType and type ajax options (note that it needs to be a POST, otherwise you need to generate your data in a different way using fully qualified property names with dot notation - for example { Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 80, ... }, in which case its your existing ajax code will work without modification)

函数需要把数据,并设置contentType和类型ajax选项(请注意,它需要一个帖子,否则您需要生成数据以不同的方式使用完全限定的属性名和点符号——例如{ Id:1、....”,标志着[0]。主题”:“数学”、“标志[0]。马克:80,……},在这种情况下,您现有的ajax代码将不需要修改就可以工作)

var student = {
    ....
};

$.ajax({
    url: '@Url.Action("Receive", "Home")',
    data: JSON.stringify({ student: student }, // stringify
    type: 'POST', // add
    contentType: "application/json; charset=utf-8", //add
    success: function (data) {
        alert("done");
    },
    ....
});

Note that you method is returning a view, but you not doing anything with that view. If your intention is to update the DOM with that view, then the method should be return PartialView( ... ); and in the ajax success callback,

注意,您的方法正在返回一个视图,但是您没有对该视图做任何操作。如果您打算用该视图更新DOM,那么方法应该返回PartialView(…);在ajax success回调中,

success: function (data) {
    $(someElement).html(data);
},