दिलचस्प पोस्ट
Async-await on .net 4 का उपयोग करना अनुरोधित लक्ष्य के लिए वैध प्रमाणीकरण पथ खोजने में असमर्थ – प्रमाणपत्र आयात के बाद भी त्रुटि अगले लॉन्च पर तेजी से लोड करने के लिए UIWebView में सामग्री को कैसे सहेजना है? जब कोई सॉर्ट ऑर्डर निर्दिष्ट नहीं होता है तो मॉगोडाब सॉर्ट रिकॉर्ड कैसे करता है? कैसे की जाँच करें कि कोई दिनांक किसी सीमा में है? Linux, C, C ++ में सिस्टम आदेश जारी करना क्या मानक कंटेनर टेम्प्लेट अधूरा प्रकारों के साथ प्रारंभ हो सकते हैं? कैसे अजगर में स्ट्रिंग डेट को डेटटाइम प्रारूप में कनवर्ट करना है? निश्चित आउटपुट में प्रिंट आउटपुट कैसे प्रारूपित करें? Windows में C ++ के साथ विंडो के स्क्रीनशॉट लेने का सबसे अच्छा तरीका क्या है? स्ट्रिंग से मठ संचालन क्लासनाम द्वारा DOM तत्व प्राप्त करना एक अर्रे सूची में वस्तुओं को स्थानांतरित करना क्या मैं वॉली के साथ एक तुल्यकालिक अनुरोध कर सकता हूं? सूचकांक द्वारा सरणी में तत्वों को स्थानांतरित करें

MVC5 रेजर html.dropdownlist के लिए चयनित जब मान सरणी में है

मैं सी # और .NET Framework 4.6.1 के साथ ASP.NET MVC 5 अनुप्रयोग विकसित कर रहा हूँ।

मेरे पास यह View :

 @model MyProject.Web.API.Models.AggregationLevelConfViewModel [...] @Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, (SelectList)Model.HelperCodeTypeItems, new { id = "Configurations[0].HelperCodeType" }) 

ViewModel है:

 public class AggregationLevelConfViewModel { private readonly List<GenericIdNameType> codeTypes; private readonly List<GenericIdNameType> helperCodeTypes; public IEnumerable<SelectListItem> CodeTypeItems { get { return new SelectList(codeTypes, "Id", "Name"); } } public IEnumerable<SelectListItem> HelperCodeTypeItems { get { return new SelectList(helperCodeTypes, "Id", "Name"); } } public int ProductionOrderId { get; set; } public string ProductionOrderName { get; set; } public IList<Models.AggregationLevelConfiguration> Configurations { get; set; } public AggregationLevelConfViewModel() { // Load CodeTypes to show it as a DropDownList byte[] values = (byte[])Enum.GetValues(typeof(CodeTypes)); codeTypes = new List<GenericIdNameType>(); helperCodeTypes = new List<GenericIdNameType>(); for (int i = 0; i < values.Length; i++) { GenericIdNameType cType = new GenericIdNameType() { Id = values[i].ToString(), Name = EnumHelper.GetDescription((CodeTypes)values[i]) }; if (((CodeTypes)values[i]) != CodeTypes.NotUsed) codeTypes.Add(cType); helperCodeTypes.Add(cType); } } } 

और Models.AggregationLevelConfiguration है:

 public class AggregationLevelConfiguration { public byte AggregationLevelConfigurationId { get; set; } public int ProductionOrderId { get; set; } public string Name { get; set; } public byte CodeType { get; set; } public byte HelperCodeType { get; set; } public int PkgRatio { get; set; } public int RemainingCodes { get; set; } } 

मुझे इन गुणों में चयनित मान सेट करने की आवश्यकता है:

 public IEnumerable<SelectListItem> CodeTypeItems { get { return new SelectList(codeTypes, "Id", "Name"); } } public IEnumerable<SelectListItem> HelperCodeTypeItems { get { return new SelectList(helperCodeTypes, "Id", "Name"); } } 

लेकिन मैं इसे new SelectList(codeTypes, "Id", "Name"); में सेट नहीं कर सकता new SelectList(codeTypes, "Id", "Name"); या new SelectList(helperCodeTypes, "Id", "Name"); क्योंकि चयनित मान Configurations सरणी में हैं: फ़ील्ड्स AggregationLevelConfiguration.CodeType Configurations और AggregationLevelConfiguration.HelperCodeType AggregationLevelConfiguration.CodeType ConfigurationsAggregationLevelConfiguration.HelperCodeType

मुझे लगता है कि मुझे दृश्य में चयनित मान सेट करना पड़ता है, लेकिन मुझे नहीं पता कि यह कैसे करना है।

मैं चयनित मान कैसे सेट करूं?

वेब के समाधान से एकत्रित समाधान "MVC5 रेजर html.dropdownlist के लिए चयनित जब मान सरणी में है"

दुर्भाग्य से @Html.DropDownListFor() एक लूप में नियंत्रण प्रदान करते समय थोड़ी अलग तरह की सहायता करता है। यह पहले कोडपेक्स पर एक समस्या के रूप में रिपोर्ट किया गया है (सुनिश्चित नहीं है कि इसके बग या सिर्फ एक सीमा)

मॉडल विकल्प के आधार पर सही विकल्प चुनने के लिए यह हल करने के लिए 2 विकल्प हैं

विकल्प 1 (एक EditorTemplate का उपयोग करके)

संग्रह में प्रकार के लिए एक कस्टम EditorTemplate बनाएं। आंशिक / / /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml ध्यान दें (नोट करें कि नाम के प्रकार से मेल खाना चाहिए

 @model yourAssembly.AggregationLevelConfiguration @Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"]) .... // other properties of AggregationLevelConfiguration 

और फिर मुख्य दृश्य में, SelectList को EditorTemplate को additionalViewData EditorTemplate रूप में पास करें

 @using (Html.BeginForm()) { ... @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems }) ... 

विकल्प 2 (प्रत्येक पुनरावृत्ति में एक नई SelectList उत्पन्न करें और selectedValue SelectList सेट करें)

इस विकल्प में आपकी प्रॉपर्टी CodeTypeItems को IEnumerable<GenericIdNameType> SelectList IEnumerable<GenericIdNameType> होना चाहिए, न कि एक SelectList (या सिर्फ एक सार्वजनिक प्रॉपर्टी codeTypes )। फिर मुख्य दृश्य में

 @Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType) 

साइड नोट: new { id = "Configurations[0].HelperCodeType" का उपयोग करने की कोई आवश्यकता नहीं है – new { id = "Configurations[0].HelperCodeType" DropDownListFor() विधि पहले ही उस id विशेषता को उत्पन्न करती है