2017-02-24 15 views
6

परिदृश्य:पासिंग डेटा

एक वस्तु जो नियंत्रक से उप वस्तुओं की एक सूची में शामिल है पारित करने के लिए की आवश्यकता है।

मुद्दा:

मैं वस्तु के मूल्य प्राप्त करने में सक्षम हूँ लेकिन ऑब्जेक्ट के अंदर उप वस्तुओं की सूची में कोई लाभ नहीं।

कोड:

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

स्क्रीनशॉट:

क्रोम डिबगर सभी डेटा स्थापित किए गए पता चलता है।

enter image description here

लेकिन नियंत्रक में मैं मार्क्स

की

enter image description here

किसी भी मदद के मूल्य नहीं मिल रहा है की सराहना की जाएगी। धन्यवाद।

उत्तर

5

आप अन्यथा आप एक अलग तरीके से अपने डेटा डॉट नोटेशन के साथ पूरी तरह से योग्य संपत्ति नाम का उपयोग उत्पन्न करने के लिए की जरूरत है डेटा stringify, और contentType और type ajax विकल्प सेट (ध्यान दें कि यह एक पोस्ट होने की जरूरत है की जरूरत है, - के लिए उदाहरण { 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"); 
    }, 
    .... 
}); 

नोट। आपका इरादा है कि दृश्य के साथ डोम अद्यतन करने के लिए है, तो विधि return PartialView(...); और ajax सफलता कॉलबैक में,

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

धन्यवाद @Stephen होना चाहिए। अच्छी तरह से काम। बस उत्सुक, यह जीईटी विधि में क्यों काम नहीं कर रहा था? –

+1

क्योंकि किसी GET कॉल में कोई बॉडी नहीं है और मान क्वेरी स्ट्रिंग (या रूट मान) से आते हैं और 'DefaultModelBinder' आपके द्वारा भेजे जाने वाले डेटा से मेल नहीं खाता है (यूआरएल को देखें जिसे आप समझने के लिए उत्पन्न कर रहे थे)। –

+1

लेकिन यह काम करेगा यदि डेटा को पहले अनुच्छेद में टिप्पणी के अनुसार स्वरूपित किया गया था - यानी नाम उसी प्रारूप में हैं जिनका उपयोग आप अपने सी # कोड में किसी संपत्ति के मूल्य तक पहुंचने के लिए करेंगे। –

संबंधित मुद्दे