मुझे एक ऐसा फॉर्म मिला है जो मेरे नियंत्रक कार्रवाई में प्रभावी रूप से ऑब्जेक्ट डिक्शनरी पोस्ट कर रहा है। इसलिए हम एक IEnumerable<EditThemeAttributeModel>
एएसपीनेट एमवीसी मॉडल बाइंडर सिस्टम.स्ट्रिंग का उत्पादन क्यों करता है []
public class EditThemeAttributeModel
{
public string Name { get; set; }
public object Value { get; set; }
}
मिल जब मैं Request.Form संग्रह मैं देख रहा हूँ कि मैं क्या उम्मीद करेंगे देखो:
[1] "Attributes[0].Name" string
[2] "Attributes[0].Value" string
[3] "Attributes[1].Name" string
[4] "Attributes[1].Value" string
[5] "Attributes[2].Name" string
[6] "Attributes[2].Value" string
हालांकि, जब मैं से एक का मान प्राप्त करने का प्रयास करने की कोशिश EditThemeAttributeModel
यह एक साधारण प्रकार के रूप में मैं उम्मीद होती है नहीं है, यह एक स्ट्रिंग सरणी है:
- Value {string[1]} object {string[]}
[0] "#ffffff" string
मैं सीधे Request.Forms संग्रह का उपयोग करके यह काम कर सकते हैं, लेकिन सिर्फ अंडर करना चाहता था इस व्यवहार को झुकाओ।
हाँ मुझे पता है, लेकिन यह सवाल नहीं था। सवाल यह है कि मॉडल बाइंडर स्ट्रिंग सरणी 'स्ट्रिंग []' क्यों उत्पन्न करता है जब हम इसे ऑब्जेक्ट्स का संग्रह पास करते हैं। –
डिफ़ॉल्ट रूप से आप किसी दिए गए पोस्ट मान के लिए उसी नाम के लिए एकाधिक मान शामिल कर सकते हैं। 'id = 1 और id = 2 और id = 3' चूंकि आप विशेष रूप से 'स्ट्रिंग' के लिए नहीं पूछ रहे हैं, लेकिन 'ऑब्जेक्ट' मॉडल बाइंडर मानता है कि यह एक सरणी हो सकता है क्योंकि यह इसे सीधे किसी प्रकार में परिवर्तित नहीं कर सकता है। सरणी निर्माण मॉडल बाइंडर की आखिरी कॉल है क्योंकि यह मूल रूप से यह नहीं समझ सका कि आप वास्तव में क्या चाहते थे। मैं इसे सुरक्षित रखने के लिए यह कर रहा हूं। – Buildstarted
आप स्रोत में मॉडल बाइंडर कोड का पालन कर सकते हैं और देख सकते हैं कि यह वास्तव में ऐसा क्यों कर रहा है जो यह कर रहा है। मैंने ऐसा कुछ समय पहले किया था जब एक स्वचालित मॉडल बाइंडर बनाते समय मेरे पास एक ही सवाल का जवाब था। http://aspnet.codeplex.com/SourceControl/changeset/view/68345#266460 'BindSimpleModel' पर देखें (वास्तविक रूपांतरण ValueProviderResult में है) – Buildstarted