एक सरल Html.DropDownListFor () कैसे लिखें?


133

ASP.NET MVC 2 में, मैं एक बहुत ही सरल ड्रॉपडाउन सूची लिखना चाहूंगा जो स्थैतिक विकल्प देता है। उदाहरण के लिए मैं "रेड", "ब्लू" और "ग्रीन" के बीच विकल्प प्रदान करना चाहता हूं।

जवाबों:


188

इस MSDN लेख और स्टैक ओवरफ़्लो पर एक उदाहरण का उपयोग देखें ।

मान लें कि आपके पास निम्न लाइनक / POCO वर्ग है:

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

और मान लें कि आपके पास निम्न मॉडल है:

public class PageModel 
{
   public int MyColorId { get; set; }
}

और, अंत में, मान लें कि आपके पास रंगों की निम्नलिखित सूची है। वे एक स्थैतिक सूची, आदि से लिनक क्वेरी से आ सकते हैं।

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color {
        ColorId = 1,
        Name = "Red"
    },
    new Color {
        ColorId = 2,
        Name = "Blue"
    }
};

आपके विचार में, आप एक ड्रॉप डाउन सूची बना सकते हैं जैसे:

<%= Html.DropDownListFor(n => n.MyColorId, 
                         new SelectList(Colors, "ColorId", "Name")) %>

1
यह वास्तव में स्पष्ट है। मैं जानना चाहूंगा कि मुझे अपने कोड में IEnumerable <Color> कहां रखना चाहिए? मुझे पता है कि यह प्रश्न के रूप में बेवकूफ लगता है, लेकिन मैं बहुत खो गया हूं और इसमें नया हूं: s
रिनेस

7
कोई चिंता नहीं, दोस्त। मुझे पता हैं यह कैसा लगता हैं। :) जैसा कि आपने अपने प्रारंभिक प्रश्न में सुझाव दिया है, क्या यह एक स्थिर सूची है जिसे आप कोड बनाने जा रहे हैं, या क्या आप इस सूची को किसी डेटाबेस से खींचने जा रहे हैं?
इवान नागले

एक स्टैटिक लिस्ट जिसमें 4 विकल्प नहीं हैं, डेटा बेस को क्रॉप नहीं करना है
Rinesse

6
"HtmlLists" या कुछ और एक स्थिर वर्ग बनाएँ। System.Web.Mvc नामस्थान में स्थिर वर्ग रखें। अपने स्थिर वर्ग में, IEnumerable <Color> Colors की अपनी स्थिर सूची जोड़ें। फिर, अपने विचार पर, आप इसे HtmlLists.Colors पर कॉल करके संदर्भित कर सकते हैं। आशा है कि समझ में आता है। मुझे बताएं। :)
इवान नागले

2
मुझे नहीं पता था कि यह कैसे करना है: '(... मुझे नहीं पता कि कलर क्लैस और एचटीएमएल लिस्ट कहां डालनी है (मॉडल फोल्डर में हो सकता है?) और व्यू में कैसे रेफर किया जा सकता है। दृश्य के एक जिम्मेदार के रूप में सूची का परिणाम..मैं इतनी उलझन में हूँ: /
चालाकी

61
<%: 
     Html.DropDownListFor(
           model => model.Color, 
           new SelectList(
                  new List<Object>{ 
                       new { value = 0 , text = "Red"  },
                       new { value = 1 , text = "Blue" },
                       new { value = 2 , text = "Green"}
                    },
                  "value",
                  "text",
                   Model.Color
           )
        )
%>

या आप कोई वर्ग नहीं लिख सकते, कुछ इस तरह से सीधे दृश्य में डाल सकते हैं।


2
जब आपका कोड आज़माया जाता है, तो मैं नीचे त्रुटि करता हूं: "ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट की आवृत्ति पर सेट नहीं होता है।"
बशर अबू शमा

12
आपके विचार में मॉडल तर्क जोड़ने का बुरा विचार
Daniël Tulp

34

मॉडल में एक शब्दकोश के साथ शुरू करने से बहुत मोटी ऊँगली से बचें

namespace EzPL8.Models
{
    public class MyEggs
    {
        public Dictionary<int, string> Egg { get; set; }

        public MyEggs()
        {
            Egg = new Dictionary<int, string>()
            {
                { 0, "No Preference"},
                { 1, "I hate eggs"},
                { 2, "Over Easy"},
                { 3, "Sunny Side Up"},
                { 4, "Scrambled"},
                { 5, "Hard Boiled"},
                { 6, "Eggs Benedict"}
            };

    }


    }

दृश्य में इसे प्रदर्शन के लिए सूची में परिवर्तित करें

@Html.DropDownListFor(m => m.Egg.Keys,
                         new SelectList(
                             Model.Egg, 
                             "Key", 
                             "Value"))

32

हाय यहाँ है कि मैं इसे एक परियोजना में कैसे किया:

     @Html.DropDownListFor(model => model.MyOption,                
                  new List<SelectListItem> { 
                       new SelectListItem { Value = "0" , Text = "Option A" },
                       new SelectListItem { Value = "1" , Text = "Option B" },
                       new SelectListItem { Value = "2" , Text = "Option C" }
                    },
                  new { @class="myselect"})

मुझे उम्मीद है कि यह किसी को मदद करता है। धन्यवाद


12

या अगर यह एक डेटाबेस संदर्भ से है जिसका आप उपयोग कर सकते हैं

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))

22
कृपया इस तरह की बकवास को प्रोत्साहित न करें। यदि आप अपने रेजर विचारों में अपने db संदर्भ को संदर्भित करना पसंद करते हैं जो कि आप पर है, लेकिन हम में से उन लोगों के लिए जो सॉफ्टवेयर का सही निर्माण करना पसंद करते हैं तो यह एक भयानक विचार है। अपने रेजर दृश्य को एक दृश्य मॉडल वर्ग से बांधें, दृश्य के लिए आवश्यक किसी भी डेटा को नियंत्रक द्वारा बनाए गए दृश्य मॉडल के एक उदाहरण में संग्रहीत किया जाता है। यह उस कारण का हिस्सा है जो मैं। नेट से दूर हो रहा हूं, बहुत सारे भयानक डेवलपर्स अपने कोड के साथ भयानक काम कर रहे हैं और हर किसी के लिए भारी सिरदर्द बना रहे हैं। मुझे यकीन है कि आप अपने सभी व्यावसायिक तर्क अपने नियंत्रकों में डाल देंगे!
जेबटन

7
सबसे पहले, किसी भी व्याकरण के गलत होने के लिए क्षमा करना क्योंकि अंग्रेजी मेरी पहली भाषा नहीं है। यह देखकर हमेशा अच्छा लगता है कि कोई व्यक्ति इस तरह की सोच-समझकर टिप्पणी करता है, मैं आपकी सराहना करता हूं कि आपने योगदान देने के लिए समय लिया है। यह भी हमेशा आश्वस्त है कि डेवलपर्स का पेशा आपके जैसे अच्छे हाथों में है, क्योंकि मेरा काम नहीं चलेगा। आपकी अज्ञानतापूर्ण टिप्पणी की पसंद यही है कि मैं अब यहां कभी पोस्ट नहीं करता। क्या मैं आपको सूचित कर सकता हूं कि जब मैंने यह लिखा था तो मैं अपनी शिक्षा में 8 महीने का था और वेब डेवलपमेंट को पहले कभी नहीं छुआ था। मैं एक छोटे से ज्ञान के साथ एक अलग-अलग aproach साझा करना चाहता था।
जोएल वाहलुंड

7
8 महीने में? फिर समस्याओं को हल करने का प्रयास क्यों करें जब आप नहीं जान सकते कि कैसे? मेरी टिप्पणी अज्ञानी से बहुत दूर है, मैं इस सामग्री को दिन और दिन में देखता हूं। आपको अपने सहयोगियों के लिए नियत मैनुअल काम की मात्रा पर विचार करना शुरू करना होगा। कल्पना करें कि आपके पास सैकड़ों दृश्यों के साथ एक एंटरप्राइज़ एप्लिकेशन है और आपका CTO Oracle DB पर स्विच करना चाहता है। कोड के केवल एक लाइन के कारण ड्रॉप डाउन सूचियों का उपयोग करने वाले सभी विचारों और नियंत्रकों को पुनः सक्रिय करने की शाब्दिक लागत की कल्पना करें! मैं आपका अपमान करने की कोशिश नहीं कर रहा हूं, बस आपको यह समझाने की कोशिश कर रहा हूं कि कैसे थोड़ी बुरी सलाह भारी प्रभाव डाल सकती है।
जेब्कटन

2
स्टैटिक एनम आधारित समाधानों को रिफलेक्टर करने की आवश्यकता से भिन्न नहीं। हर बार जब व्यवसाय सूची में रंग जोड़ना चाहता था तो कम से कम यह कोड परिवर्तन नहीं था। अगर अधिक लोग वास्तव में डेटाबेस का उपयोग करने के बारे में सोचते हैं तो दुनिया एक बेहतर जगह होगी।
m12lrpv

3
वैसे यह धागा मेरे चेहरे पर एक मुस्कान लाता है जब मैं इसे हर बार एक बार में देखता हूं। मैं समझती हूं @ सीन थोड़ा और बेहतर है। मुझे लगता है कि जब मैं मदद करने की कोशिश कर रहा था तो मुझे बस सामान्य रूप से हमला महसूस हुआ। मैं अपने आप को अब सब कुछ परतों से अलग रखने के लिए पसंद करता हूं, और जब तक कि यह ViewModels में अलग नहीं हो जाता तब तक किसी भी चीज को छूने नहीं देता। इसका सिर्फ यह है कि मैं इसे खुद करना पसंद करता हूं। मैं आप की रक्षा करने के लिए m12lrpv की रक्षा कर रहा हूं। :-)
जोएल वाहलुंड

7

"कृपया एक आइटम का चयन करें"

@Html.DropDownListFor(model => model.ContentManagement_Send_Section,
  new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } }
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })),
  new { @class = "myselect" })  

कोड से व्युत्पन्न: मास्टर प्रोग्रामर && योएल वाहलुंड ;
राजा संदर्भ: https://stackoverflow.com/a/1528193/1395101 JaredPar ;

धन्यवाद मास्टर प्रोग्रामर && योएल Wahlund && JaredPar ;

गुड लक दोस्तों।


1
@using (Html.BeginForm()) {
    <p>Do you like pizza?
        @Html.DropDownListFor(x => x.likesPizza, new[] {
            new SelectListItem() {Text = "Yes", Value = bool.TrueString},
            new SelectListItem() {Text = "No", Value = bool.FalseString}
        }, "Choose an option") 
    </p>
    <input type = "submit" value = "Submit my answer" />
} 

मुझे लगता है कि यह उत्तर बरात के समान है, जिसमें आप अपने ड्रॉपडाउनलिस्ट के लिए सभी कोड सीधे दृश्य में डालते हैं। लेकिन मुझे लगता है कि यह ay / n (बूलियन) ड्रॉप डाउन सूची बनाने का एक कुशल तरीका है, इसलिए मैं इसे साझा करना चाहता था।

शुरुआती के लिए कुछ नोट:

  • इस बात की चिंता न करें कि 'x' को क्या कहा जाता है - यह पहली बार यहाँ बनाया गया है, और MVC ऐप में कहीं और किसी चीज़ से लिंक नहीं है, इसलिए आप इसे कॉल कर सकते हैं जो आप चाहते हैं - 'x' 'मॉडल', 'एम' आदि।
  • उपयोगकर्ताओं को ड्रॉपडाउन सूची में जो प्लेसहोल्डर दिखाई देगा, वह "एक विकल्प चुनें" है, इसलिए आप चाहें तो इसे बदल सकते हैं।
  • पाठ का थोड़ा सा हिस्सा नीचे गिरा हुआ है जो कहता है "क्या आपको पिज्जा पसंद है?"
  • मुझे लगता है कि सबमिट बटन सहित फ़ॉर्म के लिए पूर्ण पाठ होना चाहिए

आशा है कि यह किसी की मदद करता है,

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.