简体   繁体   English

在ajax post问题中传递数据

[英]Passing data in ajax post issue

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调试器显示已设置的所有数据。

在此输入图像描述

but in controller i'm not getting the value of Marks 但在控制器中,我没有得到马克斯的价值

在此输入图像描述

Any help would be appreciated. 任何帮助,将不胜感激。 Thank you. 谢谢。

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) 您需要对数据进行字符串化,并设置contentTypetype ajax选项(请注意,它必须是POST,否则您需要使用带有点表示法的完全限定属性名称以不同方式生成数据 - 例如{ Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 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( ... ); 如果您的目的是使用该视图更新DOM,那么该方法应该return PartialView( ... ); and in the ajax success callback, 并在ajax成功回调中,

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM