मुझे हाल ही में किसी ग्राहक के लिए JSON समाधान लागू करते समय एक समस्या का सामना करना पड़ा। यदि कार्रवाई पैरामीटर नाम मॉडल के किसी संपत्ति नाम से मेल खाता है, तो बाइंडर किसी भी गुण को बाध्य करने में विफल रहता है।एमवीसी 3 जेसन बाइंड बग?
एक उदाहरण:
नियंत्रक लोग
public ActionResult SetEmails(Person emails){
...
return Content("");
}
क्योंकि पैरामीटर नाम, "ईमेल" कहा जाता था और उस व्यक्ति मॉडल "ईमेल" .. बांधने की मशीन में विफल रहता है कहा जाता है की एक संपत्ति नाम से मेल खाता है, लेकिन .. क्यों के रूप में कोई संकेत नहीं देता
वे था एक मॉडल व्यक्ति
public class Person {
public string Name { get; set; }
public List<string> Emails { get; set; }
public Person() {
Emails = new List<string>();
}
}
बुलाया
क्या यह एक बग है, या 'फीचर' है?
बस एक साइड नोट के रूप में, मेरा प्रश्न इस बात के संबंध में अधिक है कि एक तर्क नाम बाइंडर के साथ संघर्ष कैसे कर सकता है? नाम से कोई फर्क नहीं पड़ता क्योंकि यह वर्ग प्रकार है जो जेसन डेटा के खिलाफ मिलान करने के लिए इसकी स्कीमा को परिभाषित करता है .. बाइंडर को क्यों तर्क देना चाहिए कि आप तर्क का नाम क्या हैं या यदि यह तर्क के वर्ग प्रकार के भीतर किसी संपत्ति के नाम से मेल खाता है?
क्या आप कॉलिंग जेएस कोड पोस्ट कर सकते हैं, या कम से कम जेएसओएन जो आप सबमिट कर रहे हैं? –
जेसन होगा: {"नाम": "जॉन", "ईमेल": ["[email protected]", "test2 @ test।कॉम "]} जेसन ठीक था, जैसा कि मैंने कहा था, एक बार मैंने ईमेल से क्रिया तर्क नाम बदल दिया (मॉडल संपत्ति नाम से मेल खाता है) जो मेल नहीं खाता था, यह काम करता था .. मैंने सोचा कि यह दिलचस्प था और यह नहीं देख सकता कि यह क्यों काम नहीं करना चाहिए, या कम से कम तत्काल वर्ग के बदले एक अपरिपक्व वर्ग के बदले अपवाद फेंकना चाहिए! – Mike