2012-01-12 13 views
10

क्या एमबीसी पोस्ट में मॉडर्नबाइंडिंग आईनेमरेबल प्रकारों के साथ कोई समस्या है?एएसपी.नेट एमवीसी पोस्ट में मॉडर्नबाइंडिंग आईनेमरेबल?

मेरे मॉडल में कुछ गुणों को किसी कार्रवाई पर एक पोस्ट पर बाध्य नहीं किया जा रहा है। ऐसा लगता है कि स्ट्रिंग्स जैसे मॉडल पर गुण ठीक हैं, लेकिन मेरा आईनेमरेबल वह नहीं है जो बाध्य नहीं है।

<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.Test) %> 
    <% for (int i = 0; i < Model.ResponseInfo.SubsetInfo.BandAvailabilities.Count(); i++) 
    {%> 
     <%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %> 
    <% } %> 

और यहाँ क्या उन गुणों मॉडल में की तरह लग रही है:

यहाँ मेरी कोड का एक टुकड़ा है

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; } 
public string Test { get; set; } 

दृश्य ठीक काम करता है और उम्मीद के साथ बक्सें की एक सूची आउटपुट उनमें मूल्य। लेकिन पोस्ट एक्शन जो निकाल दिया जाता है केवल टेस्ट स्ट्रिंग को संपत्ति के रूप में पहचानता है। मॉडल स्थिति में मेरा आईनेमरेबल डेटा भी शामिल नहीं है।

+0

द्वारा नियंत्रित किया जाएगा, मैं सच में आशा है कि कोई है जो इसी तरह के मुद्दों था इस सवाल भर में लड़खड़ाती है और एक हो जाता है

<%: Html.EditorFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities%> 

और बाकी के साथ पूरे पाश को बदलने के लिए समस्या में बेहतर अंतर्दृष्टि ... – Arkiliknam

+0

मुझे यकीन नहीं है .. बिना किसी स्पष्टीकरण के कितने अच्छे प्रश्न नीचे दिए गए हैं .... मैंने इस पर ठोकर खाई और उपयोगी पाया। धन्यवाद। –

उत्तर

8

मॉडल बाध्यकारी इस बात पर निर्भर करता है कि जेनरेट किया गया HTML कैसा दिखता है। उर विशेष परिदृश्य ठीक से बाध्य करने के लिए एचटीएमएल तरह

<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[0].BandName"/> 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[1].BandName"/> 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[2].BandName"/> 
. 
. 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[n].BandName"/> 

मैं इसे करने की कोशिश नहीं की है दिखना चाहिए, लेकिन मैं लगभग निश्चित है कि पाश में कॉल toArray को विधि नेस्टेड आदानों के लिए उचित नाम पैदा करने से सिस्टम बना रहा हूँ। इस पहले, उपाय करने चीजों की जोड़ी आप कर सकते हैं आपके विचार मॉडल परिवर्तन में

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; } 

को
public IList<BandAvailabilityInfo> BandAvailabilities { get; set; } //or Array 
तो

आप पाश और वास्तविक नामों में toArray विधि कॉल करने की जरूरत नहीं है कर रहे हैं इनपुट के लिए उत्पन्न होते हैं। दूसरा, एक संपादक टेम्पलेट बनाएं और इसे वर्तमान नियंत्रक के तहत या साझा फ़ोल्डर के संपादक टेम्पलेट फ़ोल्डर में संपादक टेम्पलेट फ़ोल्डर में डालें। इस दृश्य को BandAvailabilityInfo के मॉडल को स्वीकार करें और इस दृश्य का नाम भी BandAvailabilityInfo होना चाहिए। फिर अपने मुख्य दृश्य में आप केवल downvoted दिए जाने के बावजूद ढांचा ही

+0

मुझे यकीन नहीं है कि यह वास्तव में है क्योंकि मैं ToArray का उपयोग करता हूं या नहीं, लेकिन इसे वास्तविक सरणी में बदलकर इस समस्या को हल करता है। – Arkiliknam

+0

आप जेनरेट किए गए एचटीएमएल का निरीक्षण कर सकते हैं और इसके बारे में सुनिश्चित हो सकते हैं –

0

यह IEnumarble प्रकार के साथ ठीक काम करता है।
मुझे लगता है कि समस्या ToArray है जिसे आप For लूप के अंदर लिख रहे हैं। (यह बहुत कुशल नहीं है)
for लूप foreach में बदलें।

this उत्कृष्ट उत्तर इसे प्राप्त करने के लिए देखें।

+0

मैं लूप के लिए उपयोग करता हूं क्योंकि मुझे टेक्स्टबॉक्स बनाने की ज़रूरत है जो मॉडल के एक अनुमानित पैरामीटर को पहचानने के लिए मेरे मॉडल में संग्रह का कौन सा तत्व है, मैं इस टेक्स्टबॉक्स को बना रहा हूं। इंडेक्स इन तत्वों का ट्रैक रखने का एक तरीका है। एक फोरच लूप के साथ मैं तत्व कहां से आया था इसका संदर्भ खो देता हूं। जहां तक ​​मुझे पता है कि इस तरह से तुलना में अक्षम नहीं है, खासकर यदि मैं Arrays का उपयोग करता हूं तो गति ओ (1) है। – Arkiliknam

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