से मूल्य का चयन नहीं करने के लिए मैं एएसपी.नेट एमवीसी 3 का उपयोग कर रहा हूं, और DropDownListFor
एचटीएमएल हेल्पर का उपयोग करके बस 'गॉचाचा' में भाग गया।एएसपी.नेट एमवीसी ड्रॉपडाउनलिस्ट मॉडल
मैं अपने नियंत्रक में ऐसा करते हैं:
ViewBag.ShippingTypes = this.SelectListDataRepository.GetShippingTypes();
और GetShippingTypes
विधि:
public SelectList GetShippingTypes()
{
List<ShippingTypeDto> shippingTypes = this._orderService.GetShippingTypes();
return new SelectList(shippingTypes, "Id", "Name");
}
कारण मैं ViewBag
में और मॉडल में नहीं डाल दिया (मैं दृढ़ता से टाइप किया है के लिए मॉडल प्रत्येक दृश्य), यह है कि मेरे पास एक आइटम टेम्पलेट का उपयोग करने वाले आइटमों का संग्रह है, जिन्हें शिपिंग प्रकार टाइप सूची तक पहुंचने की भी आवश्यकता है।
अन्यथा मुझे पूरे संग्रह के माध्यम से लूप करने की आवश्यकता है, और फिर शिपिंग टाइप संपत्ति को असाइन करना होगा।
अभी तक इतना अच्छा है।
मेरी नजर में, मैं यह कर:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, ViewBag.ShippingTypes as SelectList)
,
क्या होता है (RequiredShippingTypeId
प्रकार Int32
की है) कि RequiredShippingTypeId
का मूल्य नहीं ड्रॉप डाउन में चयनित है।
मैं इस भर में आया था: http://web.archive.org/web/20090628135923/http://blog.benhartonline.com/post/2008/11/24/ASPNET-MVC-SelectList-selectedValue-Gotcha.aspx
उनका सुझाव है कि MVC ViewData
, जब चयन सूची ViewData
से है से चयनित मूल्य देखने होंगे। मुझे यकीन नहीं है कि यह अब मामला है, क्योंकि ब्लॉग पोस्ट पुराना है और वह एमवीसी 1 बीटा के बारे में बात कर रहा है।
का संभावित हल है कि इस मुद्दे को हल करती है यह है: कोई आइटम नहीं चुना:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, new SelectList(ViewBag.ShippingTypes as IEnumerable<SelectListItem>, "Value", "Text", Model.RequiredShippingTypeId.ToString()))
मैं अंत है, जो मुझे पहले की तरह ही व्यवहार देता है पर RequiredShippingTypeId
पर ToString
के लिए नहीं की कोशिश की।
मुझे लगता है कि यह एक डाटाटाइप मुद्दा है। आखिरकार, एचटीएमएल हेल्पर Int32
(RequiredShippingTypeId
से) के साथ तारों (चयन सूची में) की तुलना कर रहा है।
लेकिन क्यों यह जब ViewBag
में selectList डाल काम नहीं करता है - जब यह पूरी तरह से काम करता है जब यह एक मॉडल को जोड़ने, और देखने के अंदर यह कर:
@Html.DropDownListFor(m => m.Product.RequiredShippingTypeId, Model.ShippingTypes)
वैकल्पिक हल के लिए धन्यवाद! तो यह स्पष्ट नहीं है कि जादू केवल "सरल" लैम्ब्डा अभिव्यक्तियों के साथ काम करता है, और सिस्टम इसके बारे में कोई चेतावनी नहीं देता है। –