2017-02-24 39 views
6

Senaryo:veri geçen

kontrolöre alt nesnelerin listesini içeren bir nesne geçmesi gerekir.

Sayı:

Ben nesnenin değeri elde edebilmek değilim

ancak nesne içindeki alt nesnelerin listesinin değer.

Kodu:

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

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

Ekran Görüntüsü:

Krom ayıklayıcı tüm veriler kuruldu gösterir.

enter image description here

ama denetleyici i Herhangi yardım

enter image description here

Marks

değerini alamıyorum mutluluk duyacağız. Teşekkür ederim.

cevap

5

aksi halde nokta gösterimi ile tam özellik adlarını kullanarak farklı bir şekilde verilerini oluşturmak için gereken verileri stringify ve POST olması gerektiğini unutmayın (contentType ve type ajax seçeneklerini ayarlamak gerekir - için onun varolan ajax kodu değişiklik yapılmadan çalışacak bu durumda örnek { Id: 1, .... , 'Marks[0].Subject': 'Maths', 'Marks[0].Mark': 80, ... } yapıldığında), yöntem bir görünüm dönen, ancak o görünümle hiçbir şey yapmıyor

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

Not. Niyetin bu görünümü ile DOM güncellemek için ise, yöntem return PartialView(...); ve ajax başarı geri aramasında,

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

Teşekkür @Stephen olmalıdır. Mükemmel çalışıyor. Sadece merak ediyorum, Neden GET yönteminde çalışmıyordu? –

+1

Bir GET çağrısının gövde içermemesi ve değerlerin sorgu dizesinden (veya rota değerlerinden) gelmesi ve "DefaultModelBinder" öğesinin gönderiminizle eşleşememesidir (anlamak için oluşturduğunuz url'e bakın). –

+1

Ancak, veriler ilk paragraftaki yoruma göre biçimlendirildiğinde işe yarar - yani isimler C# kodunuzdaki bir özelliğin değerine erişmek için kullanacağınız biçimdedir. –