जावास्क्रिप्ट: .NET एमवीसी एक्शन में उपयोग के लिए क्रमबद्ध सरणी के साथ जेसन ऑब्जेक्ट

आसान सवाल:

मैं कुछ डेटा इस तरह की कार्रवाई में पोस्ट करना चाहता हूं:

        var data = {
            Prop1 : 'a',
            ListOfObjects: [{ PropertyA: 1, PropertyB: 2 }, { PropertyA: 3, PropertyB: 4}]
        };

जब मैं jQuery AJAX के माध्यम से अपने कार्य में यह डेटा भेजता हूं, तो मेरा मॉडल आंशिक रूप से भरा हुआ है:

public class MyObject{
    public int PropertyA {get;set;}
    public int PropertyB {get;set;}
}

public class MyModel{
    public string Prop1 {get;set;}
    public List ListOfObjects {get;set;}
}

public JsonResult Save(MyModel model)
.
.
.
model.Prop1 //Is okay!
model.ListOfObjects[0]//is okay too...List has 2 items
model.ListOfObjects[0].PropertyA; //Nope...no values inside this model...

I guess the reason is, that the serialized HTTP Data are wrong, they are like ListOfObjects[0][PropertyA] <- but it should be ListOfObjkects[0].PropertyA

आप में से कोई जानता है कि क्या करना है?!

संपादित करें: मेरा jQuery AJAX कोड:

$.ajax({
                    type: 'POST',
                    url: saveURL,
                    dataType: 'json',
                    data: data,
                    complete: function() {
                        DeleteMainLoader();
                    },
                    success: function success(data, textStatus, jqXHR) {
                        if (data.success) {
                            alert('win!')
                        }
                        else {
                            alert('error');
                        }

                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                        alert('errrrrooooorrrr');
                    }
                });
0
हाँ धन्यवाद, मुझे एक "," याद आया, लेकिन मेरे कोड में नहीं :) मैंने यह सब मेरे दिमाग से बाहर लिखा, क्योंकि मैं इस समय काम पर था। मैंने अपनी पहली पोस्ट संपादित की और मैंने अपना jQuery AJAX कॉल जोड़ा जो मैंने उपयोग किया था
जोड़ा लेखक DoubleVoid, स्रोत
अपने jQuery AJAX कोड पोस्ट कर सकते हैं?
जोड़ा लेखक Timeless, स्रोत

1 उत्तर

यदि आप एएसपी.नेट एमवीसी 3 या बाद में उपयोग कर रहे हैं, तो वहां करने की सबसे आसान बात यूआरएल एन्कोडेड डेटा के बजाय जेएसओएन भेजना है। इससे जटिल, नेस्टेड ऑब्जेक्ट्स काम करने में बहुत आसान होते हैं क्योंकि jQuery को उस बिंदु पर एएसपी.नेट एमवीसी के किसी भी सम्मेलन को समझने की आवश्यकता नहीं होती है।

ऐसा करने के लिए, बस अपने सर्वर-साइड क्लास से मेल खाने वाली ऑब्जेक्ट बनाएं, इसे स्ट्रिंग करें, और अनुरोध पर application/json की सामग्री प्रकार सेट करना सुनिश्चित करें:

var data = {
  Prop1 : 'a',
  ListOfObjects: [{ PropertyA: 1, PropertyB: 2 }, { PropertyA: 3, PropertyB: 4}]
};

$.ajax({
  type: 'POST',
  url: saveURL,
 //This is unnecessary; jQuery will detect the response's dataType based
 // on its Content-Type header automatically.
  dataType: 'json',
 //This sets the request's Content-Type to let MVC know how to interpret the
 // data parameter.
  contentType: 'application/json',
 //I can't remember if this is 100% necessary in this case, but some ASP.NET 
 // endpoints only work if you match up the method's parameter name like this.
  data: JSON.stringify({ model: data })
});
0
जोड़ा
वाह धन्यवाद! यह एक आकर्षण की तरह काम करता है: डी और हाँ मुझे मॉडल का उपयोग करना होगा: डेटा ... अन्यथा मुझे सर्वर त्रुटि मिलती है।
जोड़ा लेखक DoubleVoid, स्रोत