2013-06-10 8 views
6

में मल्टीइलेक्टेड ड्रॉपडाउनलिस्ट मान कैसे प्राप्त करें मुझे बहु चयन ड्रॉपडाउन सूची मान प्राप्त करने में कोई समस्या है। कोई भी मुझे बताता है कि एकाधिक ड्रॉपडाउनलिस्ट मानों के साथ-साथ उन्हें नियंत्रक में कैसे प्राप्त करें।एएसपीनेट एमवीसी

मेरे कोड इस तरह है: -

मॉडल

public string BusinessUnitSiteSafetyRepresentative { get; set; } 

नियंत्रक

[HttpPost] 
public ActionResult AddClientBusinessUnitSite(LocalAddClientBusinessUnitSite local) 
{ 
var query = from o in entitydb.systemusersorganizations.toList() 
      from c in entitydb.contacts.toList() 
      where o.orgId == clientId 
      select new SelectListItem 
      { 
       Text = c. Name; 
       Value = c.OrgId.toString()     
      } 
ViewBag.list1 = query.ToList(); 
} 

ठीक है, मैं अगर एकल मान का चयन किया जाता & डीबी को बचा सकता है प्राप्त कर सकते हैं लेकिन कंट्रोल में उन्हें प्राप्त करने के साथ-साथ कई मानों का चयन कैसे करें उन्हें बचाने के लिए ओलर।

नोट: - मैं उपरोक्त दिखाए गए डीबी से ड्रॉपडाउनलिस्ट मान पुनर्प्राप्त कर रहा हूं।

देखें

@Html.ListBoxFor(x => Model.BusinessUnitSiteSafetyRepresentative,new 
MultiSelectList((IEnumerable<SelectListItem>)@Viewbag.list1) 

मैं कुछ उदाहरण के माध्यम से चले गए हैं लेकिन उनमें से कोई मेरी तरफ मेरी मदद की मदद की।

+0

_ "उनमें से कोई भी मेरी मदद नहीं करता है। कृपया मेरी मदद करें।" _ _hat_ के साथ? आपने यह नहीं दिखाया कि क्या होता है और आप क्या होने की उम्मीद करते हैं। – CodeCaster

+0

मैं कह रहा हूं कि जिन उदाहरणों से मैंने गुजरना शुरू किया है, उन्होंने मेरी मदद नहीं की है। मेरा मतलब है कि कई मूल्यों का चयन भी मेरे लिए काम नहीं कर रहा है, भले ही मैं ListBoxFor का उपयोग करता हूं .. – user2436792

+0

_ "काम नहीं कर रहा" _ भी सहायक नहीं है। आपने किस कोड का उपयोग किया, क्या हुआ और आप क्या होने की उम्मीद करते थे? – CodeCaster

उत्तर

26

क्या मेरा सुझाव है कि अपने मॉडल अपने बहु चयन सूची में आइटम के साथ कई रिश्ते के लिए एक होना चाहिए।

public class Blog 
{ 
    public Blog() 
    { 
     Tags = new List<Tag>(); 
    } 

    public string BlogTitle{ get; set; } 
    public string Body{ get; set; } 
    public virtual ICollection<Tag> Tags{ get; set; } 
} 

और इसलिए की तरह अपने टैग मॉडल:

public int TagID{ get; set; } 
    public string TagName{ get; set; } 
    public virtual ICollection<Blog> Blogs{ get; set; } 

अब मैं आप का उपयोग की सलाह देते हैं

आपके ब्लॉग के मॉडल की तरह लग रहे हो सकता है:

एक उदाहरण एकाधिक टैग के साथ एक ब्लॉग है एक दृश्य मॉडल:

public class BlogViewModel 
{ 
    public Blog blog{ get; set; } 
    public List<int> SelectedTags { get; set; } 

    public virtual List<Tag> Tags{ get; set; } 

    public BlogViewModel() 
    { 

    } 

    public BlogViewModel(Blog _blog, List<Tag> _Tags) 
    { 
     blog = _blog; 
     Tags = _Tags; 
     SelectedTags = new List<int>(); 
    } 
} 

और आखिरकार आपके व्यू में (जो व्यूमोडेल से विरासत में आता है);

@Html.ListBoxFor(m => m.SelectedTags, 
new MultiSelectList(Model.Tags, "TagID", "Tag") 
, null) 

JQuery चुना प्लगइन इस http://harvesthq.github.io/chosen/ लिए उत्कृष्ट है। आप से इसका इस्तेमाल कर सकते हैं:

@Html.ListBoxFor(m => m.SelectedTags, 
new MultiSelectList(Model.Tags, "TagID", "Tag") 
, new { @class = "chzn-select", data_placeholder = "Tags..." }) 

अपने स्वयं के मॉडल और नियंत्रकों के साथ इस बदलें और इस अपनी समस्या को हल करना चाहिए। इसके अलावा, इस एक मौजूदा पोस्ट को संपादित करने (जोड़ने और टैग को हटाने) के लिए एक नया ब्लॉग पोस्ट बनाने के लिए अपने रूप में काम करेंगे, और

संपादित करें:

अपने ब्लॉग नियंत्रक कार्य बनाएँ में, आप इस हो जाएगी:

public ActionResult Create() 
    { 

     var blog = new Blog(); 
     var AllTags = from t in db.Tags 
          select t; 
     BlogViewModel viewModel = new BlogViewModel(blog, 
      Tags.ToList()); 

     return View(viewModel); 

    } 

    public ActionResult Create(BlogViewModel blogViewModel) 
    { 
     Blog blog = blogViewModel.blog; 

     if (blogViewModel.SelectedTags != null) 
     { 
      foreach (var TagID in blogViewModel.SelectedTags) 
      { 
       Tag tag = db.Tags.Where(t => t.TagID == TagID).First(); 
       blog.Tags.Add(tag); 
      } 
     } 
     db.Blog.Add(blog); 
     db.SaveChanges(); 
    } 
+0

आपके कोड के लिए धन्यवाद। चयनित मूल्यों को नियंत्रक में कैसे प्राप्त करें ?? – user2436792

+0

मैंने अपना उत्तर एक निर्माण विधि जोड़ने के लिए संपादित किया है जो दिखाता है कि आप कैसे पाएंगे कि कौन से मान चुने गए थे – Evonet

+0

बहुत अच्छा है। धन्यवाद लेकिन मुझे एक साधारण समाधान मिला .. धन्यवाद – user2436792

4

कोशिश एक सूची प्रकार करने के लिए अपने modelproperty बदलने के लिए एक से अधिक मान स्वीकार करने के लिए:

public IEnumerable<string> BusinessUnitSiteSafetyRepresentative { get; set; } 
1

ईवोनेट द्वारा अच्छा जवाब। यह एक अलग दृष्टिकोण है लेकिन मेरे लिए अच्छा काम किया।http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application के लिए

खोजें:

यहाँ यह करने के लिए माइक्रोसॉफ्ट के आधिकारिक तरीका है एक में शामिल होने के रूप में निम्नलिखित डेटाबेस चित्र में दिखाया गया तालिका डेटाबेस में आवश्यक है, तथापि,:

मैं इसे करने की कोशिश की और हाँ इसने टेबल बनाया लेकिन मुझे टेबल पर लिखने के लिए नियंत्रक को संपादित करना शुरू करना पड़ा। तब मुझे भी एक संबंध पहले से मौजूद होने के मामलों के बारे में सोचना पड़ा था।

तो मैंने इस विधि को दोबारा शुरू किया जो मेरे लिए ठीक काम करता था।