2011-08-14 11 views
5

मुझे एक ऐसा फॉर्म मिला है जो मेरे नियंत्रक कार्रवाई में प्रभावी रूप से ऑब्जेक्ट डिक्शनरी पोस्ट कर रहा है। इसलिए हम एक 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 संग्रह का उपयोग करके यह काम कर सकते हैं, लेकिन सिर्फ अंडर करना चाहता था इस व्यवहार को झुकाओ।

उत्तर

4

http अनुरोधों से सभी पोस्ट डिफ़ॉल्ट रूप से स्ट्रिंग्स हैं। चूंकि आप किसी टाइप किए गए ऑब्जेक्ट की बजाय ऑब्जेक्ट का संदर्भ दे रहे हैं, यह स्ट्रिंग के लिए डिफ़ॉल्ट है क्योंकि ब्राउज़र से आने वाला डेटा एक स्ट्रिंग है। यदि आप चाहते हैं कि यह स्ट्रिंग न हो, तो मेरा सुझाव है कि आप अपनी ऑब्जेक्ट टाइप करें या आप EditThemeAttributeModel के लिए अपना स्वयं का मॉडल बाइंडर बना सकते हैं।

+0

हाँ मुझे पता है, लेकिन यह सवाल नहीं था। सवाल यह है कि मॉडल बाइंडर स्ट्रिंग सरणी 'स्ट्रिंग []' क्यों उत्पन्न करता है जब हम इसे ऑब्जेक्ट्स का संग्रह पास करते हैं। –

+2

डिफ़ॉल्ट रूप से आप किसी दिए गए पोस्ट मान के लिए उसी नाम के लिए एकाधिक मान शामिल कर सकते हैं। 'id = 1 और id = 2 और id = 3' चूंकि आप विशेष रूप से 'स्ट्रिंग' के लिए नहीं पूछ रहे हैं, लेकिन 'ऑब्जेक्ट' मॉडल बाइंडर मानता है कि यह एक सरणी हो सकता है क्योंकि यह इसे सीधे किसी प्रकार में परिवर्तित नहीं कर सकता है। सरणी निर्माण मॉडल बाइंडर की आखिरी कॉल है क्योंकि यह मूल रूप से यह नहीं समझ सका कि आप वास्तव में क्या चाहते थे। मैं इसे सुरक्षित रखने के लिए यह कर रहा हूं। – Buildstarted

+0

आप स्रोत में मॉडल बाइंडर कोड का पालन कर सकते हैं और देख सकते हैं कि यह वास्तव में ऐसा क्यों कर रहा है जो यह कर रहा है। मैंने ऐसा कुछ समय पहले किया था जब एक स्वचालित मॉडल बाइंडर बनाते समय मेरे पास एक ही सवाल का जवाब था। http://aspnet.codeplex.com/SourceControl/changeset/view/68345#266460 'BindSimpleModel' पर देखें (वास्तविक रूपांतरण ValueProviderResult में है) – Buildstarted

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