2013-05-14 8 views
31

मैं एक ajax पद मिल गया है इस तरह निर्माण किया जा रहाअजाक्स ASP.net MVC नियंत्रक को पद वस्तु गुण अशक्त हैं

[HttpPost] 
public JsonResult MyAction(MyClass[] items) 
{ 

} 

MyClass बस है डेटा का एक सरल प्रतिनिधित्व:

public class MyClass { 
    public string Name {get; set; } 
    public string Id {get; set; } 
} 

जब जावास्क्रिप्ट पोस्ट अनुरोध करता है, नियंत्रक कार्रवाई करता है वास्तव में 2 आइटम प्राप्त करते हैं, हालांकि इन वस्तुओं में गुण (आईडी, नाम) शून्य हैं।

Fiddler में अनुरोध जाँच हो रही है, शरीर इस तरह दिखता है:

Name     | Value 
items[0][Name]  | Name 1 
items[0][Id]   | a 
items[1][Name]  | Name 2 
items[1][Id]   | b 

मैं कुछ छूट गया है?

+2

बस एक अनुमान है, शायद क्योंकि यह गुण जावास्क्रिप्ट और सी # में अपरकेस में लोअरकेस कर रहे हैं। – Tallmaris

+3

नहीं, ऐसा नहीं है। JSON serializer केस संवेदनशील नहीं है। –

+0

एक और परिदृश्य जहां गुण शून्य हैं - http://stackoverflow.com/questions/18124405/json-object-properties-are-coming-as-null – Lijo

उत्तर

59

क्या मुझे कुछ याद आया है?

हाँ, सही तार प्रारूप कि डिफ़ॉल्ट मॉडल बांधने की मशीन संग्रह बंधन के लिए उम्मीद को समझने के लिए following article पर एक नज़र डालें। दूसरे शब्दों में, यह काम के लिए करने के लिए, के बजाय:

items[0][Name]  | Name 1 
items[0][Id]   | a 
items[1][Name]  | Name 2 
items[1][Id]   | b 

अपने पेलोड इस तरह देखा जाना चाहिए था:

items[0].Name  | Name 1 
items[0].Id   | a 
items[1].Name  | Name 2 
items[1].Id   | b 

jQuery के साथ दुर्भाग्य से यह इस पेलोड प्राप्त करने के लिए काफी निराशा हो सकती है। इस कारण से मैं सुझाव है कि आप एक JSON पेलोड उपयोग करें यदि आप AJAX के साथ अपने सर्वर पर जटिल वस्तुओं/सरणियों भेजना चाहते हैं:

$.ajax({ 
    type: 'POST', 
    url: '/myurl/myAction', 
    data: JSON.stringify({ items: myData }), 
    contentType: 'application/json', 
    error: function (err) { 
     alert("error - " + err); 
    } 
}); 

हालात को नोटिस:

  • बजाय data: JSON.stringify({ items: myData })data: { items: myData }
  • contentType: 'application/json' जोड़ा
  • मिल dataType: 'json'
से छुटकारा

अब आप अपने पेलोड इस तरह दिखता है:

{"items":[{"id":"a","name":"Name 1"},{"id":"b","name":"Name 2"}]} 
+0

काम करता है - धन्यवाद! – Alex

+0

मेरे कोड के साथ क्या गलत था यह जानने की कोशिश कर मेरे समय के दो घंटे लग गए। धन्यवाद दोस्त! – Sanchitos

+4

यह शायद स्पष्ट है लेकिन यह भी ध्यान दें कि '{get; सेट; } 'आपके गुण सर्वर पक्ष पर भी इसे बना या तोड़ देगा! यही वह सब था जिसे मैं याद कर रहा था लेकिन इसने मुझे सही दिशा में इंगित किया। धन्यवाद! – lhan

-4

आप समस्या को हल करने के लिए इस कोड का उपयोग कर सकते हैं:

$.ajax({ 
    url: '/myurl/myAction', 
    data: { '': items }, 
    method: "POST", 
    dataType: 'json', 
    success: function (xhr, status, response) { 
    }, 
    error: function (xhr, status, response) { 
    } 
}); 

[HttpPost] 
public JsonResult MyAction(IEnumerable<MyClass> items) 
{ 

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