2010-03-03 10 views
7

मैं मल्टीसेलेक्स्टलिस्ट के लिए चयनित मान सेट करने का प्रयास कर रहा हूं लेकिन पृष्ठ चयनित के रूप में कोई भी मान प्रदर्शित नहीं करता है। मैंने ऐसा करने के हर व्यावहारिक तरीके से प्रयास किया है और अभी भी वही परिणाम प्राप्त कर चुके हैं। मैं वर्तमान में कन्स्ट्रक्टर के माध्यम से चयनित वस्तुओं की एक सूची पास करने की कोशिश कर रहा हूं। मुझे क्या मिलता है कि जब मैं मल्टीसेलेक्स्टलिस्ट ऑब्जेक्ट का निरीक्षण करता हूं, तो चयनित गुणों में संपत्ति में वे आइटम होते हैं जिन्हें मैंने कन्स्ट्रक्टर का उपयोग करके पारित किया है लेकिन यह अभी भी विवाद नहीं करता है।.NET MVC MultiSelectList और चयनित मान

मैंने देखा है कि कई लोगों को एक ही समस्या हो रही है, लेकिन मैं एक जवाब है कि मेरे लिए काम किया है नहीं देखा है। मैंने सूची के माध्यम से पुन: प्रयास करने और चयनित संपत्ति को सही करने की कोशिश की है, मैंने स्क्रैच से मल्टीइलेक्स्टलिस्ट बनाने और प्रत्येक अलग-अलग आइटम चयनित संपत्ति को सेट करने का प्रयास किया है और मैंने कन्स्ट्रक्टर का उपयोग करने का प्रयास किया है। इनमें से कोई भी काम नहीं किया है। मुझे यह भी एक सुझाव मिला कि मल्टीसेलेक्स्टलिस्ट संपत्ति को नियंत्रण के समान नाम नहीं दिया जा सकता (जिसे मैंने कोशिश की) और यह काम नहीं किया। संक्षेप में, इस ढांचे का उपयोग करके चयनित मूल्यों के साथ एक ड्रॉपडाउन सूची बनाना इतना मुश्किल क्यों है? क्या मैं कुछ भूल रहा हूँ?

स्टेट्स प्रैक्टिस:
<% = Html.ListBox ("StatesOfPractice", Model.StatesOfPracticeList)%>
<% = Html.ValidationMessage ("StatesOfPractice")%>

संपादित करें # 1

ऐसा प्रतीत होता है जब मैं मल्टीसेलेलिस्ट को तुरंत चालू करता हूं। यदि मैं दृश्य में ऑब्जेक्ट का निरीक्षण करता हूं और परिणाम दृश्य खोलता हूं तो मैं देख सकता हूं कि "अलास्का" चयनित नहीं है जब मुझे पता है कि यह होना चाहिए।

http://imgur.com/eTIdH.jpg

मैं इस तरह instantiating कर रहा हूँ।

नई MultiSelectList (सूची, "कोड", "विवरण", सूची);

जेनेरिकडाटाकंट्रैक्ट केवल दो गुणों, कोड और विवरण वाले वर्ग है। पहली सूची सभी राज्यों में है, दूसरी सूची मेरे चुने हुए राज्य हैं।

उत्तर

1

मेरा मानना ​​है कि यह आइटम की सूची से चयनित आइटम को मॉडल से खींचता है। सुनिश्चित करें कि आपकी StatesOfPractice मॉडल प्रॉपर्टी उन आइटम्स के साथ पॉप्युलेट की गई है जिन्हें आप चुनना चाहते हैं। यही है, StatesOfPracticeList मॉडल संपत्ति सूची को पॉप्युलेट करने के लिए उपयोग की जाने वाली वस्तुओं का सेट प्रदान करती है। मॉडल प्रॉपर्टी StatesOfPractice जो फॉर्म पोस्ट होने पर चयनित प्रॉपर्टी वैल्यू का सेट होगा, दृश्य को प्रस्तुत किए जाने पर डिफ़ॉल्ट चयनित मान भी होना चाहिए। हुड के तहत यह किसी भी चयन सूची के लिए चयनित मान (ओं) को खोजने के लिए HtmlHelper GetModelStateValue विधि का उपयोग करता है। मुझे लगता है कि यह किया जाता है ताकि सत्यापन मानों को बनाए रखने के लिए चयनित मानों को बनाए रखना आसान हो और फ़ॉर्म को मॉडल स्थिति त्रुटियों के साथ पुन: प्रस्तुत किया जाए।

+0

टिप्पणी हटा दी गई - – jamesamuir

8

Grrrrrr, मैंने पाया। जाहिर है, चयनित आइटम केवल तारों की एक सूची हो सकते हैं। एक बार जब मैंने इसे पास करने के लिए अपना कोड संशोधित किया, तो उसने मूल्यों का चयन किया।

tvanfosson - सहायता और त्वरित प्रतिक्रिया के लिए धन्यवाद। अत्यधिक सराहनीय!

+0

पोस्ट करने के लिए संपादन देखें मैं आपके प्रश्न को ढूंढने तक एक घंटे से अधिक समय तक इसके साथ संघर्ष कर रहा हूं। मुझे लगता है कि यह इरादा व्यवहार नहीं हो सकता है। इसे ठीक करना कितना मुश्किल हो सकता है? – Bardo

3

ठीक है, यह वास्तव में मुझे उलझन में है, लेकिन मुझे लगता है कि मुझे यह पता चला है।

समस्या मैं था चयनित चूक के साथ प्रदर्शित करने के लिए MultiSelectList हो रही है कि मैं @Html.DropDownListFor(...) उपयोग कर रहा था @Html.ListBoxFor(...) के बजाय बहु चयन सूची प्रदर्शित करने के किया गया था। यदि आप HTML ऐसा करने के लिए यह मजबूर करने के लिए विशेषताएं निर्दिष्ट भी संदेहास्पद DropDownListFor एक बहु चयन सूची प्रदर्शित करेगा, लेकिन मूलभूत मूल्यों नहीं होगा काम करते हैं, क्योंकि यह केवल एक डिफ़ॉल्ट का इरादा है - निम्नलिखित होगा इसलिए नहीं किसी भी चूक का चयन किया है:

List<string> myStrings; 
myStrings = new List<string>(); 
myStrings.Add("aaa"); 
myStrings.Add("bbb"); 
myStrings.Add("ccc"); 

ViewData["MyStringsDropdown"] = new MultiSelectList(
    myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }), 
    "StringId", 
    "Title", 
    myStrings.Where(str => str == "aaa" || str == "ccc").ToList() 
); 

... 

@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" }) 

हालांकि, निम्नलिखित के रूप में चुना "aaa" और "सीसीसी" की चूक को प्रदर्शित करेगा:

@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" }) 

लेकिन यहां असली किकर है; ASP.NET कभी कभी कैश नियंत्रण के प्रकार लगता है, इसलिए आप ListBoxFor साथ DropDownListFor जगह ले सकता है और यह अभी भी नहीं किसी भी चूक जब तक आप आईआईएस कार्यकर्ता प्रक्रिया पुनः आरंभ पूर्व का चयन करेंगे। मुझे लगता है कि वास्तव में अजीब है, और यह मुझे थोड़ी देर के लिए फेंक दिया।