2017-02-24 17 views
6

Kịch bản:dữ liệu Passing trong ajax bài vấn đề

Cần phải vượt qua một đối tượng, trong đó có một danh sách các đối tượng phụ với bộ điều khiển.

Vấn đề:

tôi có thể nhận được giá trị của đối tượng nhưng không phải là giá trị của danh sách các đối tượng phụ bên trong đối tượng.

Code:

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

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

Student.cs

01.
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; } 
} 

Ảnh chụp màn hình:

debugger Chrome sẽ hiển thị tất cả các dữ liệu đã được thiết lập.

enter image description here

nhưng trong điều khiển tôi không nhận được giá trị của Marks

enter image description here

giúp đỡ Bất kỳ sẽ được đánh giá. Cảm ơn bạn.

Trả lời

5

Bạn cần phải xâu chuỗi dữ liệu và đặt các tùy chọn a23ax ajax (lưu ý rằng nó cần phải là POST, nếu không bạn cần tạo dữ liệu theo cách khác bằng cách sử dụng tên thuộc tính đủ điều kiện với ký hiệu dấu chấm - cho Ví dụ { Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 80, ... }, trong trường hợp đó mã ajax hiện tại của bạn của nó sẽ làm việc mà không sửa đổi)

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"); 
    }, 
    .... 
}); 

Lưu ý rằng bạn phương pháp đang trở lại một cái nhìn, nhưng bạn không làm bất cứ điều gì với quan điểm đó. Nếu mục đích của bạn là để cập nhật các DOM với quan điểm cho rằng, sau đó phương pháp này nên return PartialView(...); và gọi lại thành công ajax,

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

Cảm ơn @Stephen. Hoạt động hoàn hảo. Chỉ tò mò, Tại sao nó không hoạt động trong phương thức GET? –

+1

Vì lệnh gọi GET không có phần thân và các giá trị đến từ chuỗi truy vấn (hoặc giá trị tuyến đường) và 'DefaultModelBinder' không thể khớp với dữ liệu bạn gửi (xem url bạn tạo để hiểu). –

+1

Nhưng nó sẽ hoạt động nếu dữ liệu được định dạng theo nhận xét trong đoạn đầu tiên - tức là các tên có cùng định dạng mà bạn sẽ sử dụng để truy cập giá trị của thuộc tính trong mã C# của bạn. –

Các vấn đề liên quan