2013-06-10 23 views
6

multiselected Dropdownlist değerleri almak için Çoklu seçim açılan liste değerleri almak için bir sorunum var.birisi bana nasıl birden fazla dropdownlist değerleri seçmek yanı sıra denetleyicide onları almak için nasıl öneririm.Nasıl asp.net mvc

Benim kod şu şekildedir: - tek değer & DB kaydedebilirsiniz seçilirse

Modeli

public string BusinessUnitSiteSafetyRepresentative { get; set; } 

Kontrolör

[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(); 
} 

Eh, alabilirsiniz .But nasıl Contr içinde almak için birden fazla değer seçmek nasıl onları kurtarmak için oller.

Not: - Aşağı açılır liste değerlerini yukarıda gösterildiği gibi DB'den alıyorum.

Görünüm

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

bazı örnekler üzerinden gitmiş ancak bunların hiçbiri me.Please bana yardım sağladı.

+0

_ "bunların hiçbiri me.Please bana yardım yardımcı oldu." _ _what_ ile? Ne olduğunu ve ne olmasını beklediğinizi göstermediniz. – CodeCaster

+0

Ben Örnekler ben bana yardım etmediniz üzerinden gitti söylüyorum. ListBoxFor'u kullanmamda bile çalışmamı sağlayan birden fazla değer bile seçiyorum. – user2436792

+0

_ "çalışmıyor" _ da yararlı değil. Hangi kodu kullandın, ne oldu ve ne olmasını bekledin? – CodeCaster

cevap

26

Benim önerim modeliniz sizin çoklu Seçim listesinde öğeleri ile birçok ilişki bir tane olması gerekir olmasıdır.

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; } 
} 

Ve böylece gibi etiket modeli:

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

Şimdi kullandığınız tavsiye

Blogunuz modeli gibi görünebilir:

bir örnek birden çok etiketle bir blog olduğunu görünüm modeli:

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>(); 
    } 
} 

Son olarak Görünümünüzde (ViewModel'den miras alınan);

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

JQuery Seçilmiş Eklentinin bu http://harvesthq.github.io/chosen/ için mükemmeldir. Kullanabilirsiniz:

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

Bunu kendi modeliniz ve denetleyicilerinizle değiştirin ve sorununuzu çözmeniz gerekir. Ayrıca, bu yeni bir blog yazısı oluşturmak için formunuza çalışmak ve mevcut bir yazıyı düzenliyor (ekleme ve etiketlerini çıkarmadan) için olacak

düzenleme:

blogunda denetleyici eylem oluştur yılında

, bu şekilde doldurulur:

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

Kodunuz için teşekkürler. denetleyicide seçilen değerler nasıl alınır? – user2436792

+0

Ben size – Evonet

+0

Thats harika seçildi hangi değerlerin bulacağını gösterir yöntemi oluşturmak eklemek için benim cevap kaydetmiştiniz. Teşekkür ederim ama basit bir çözüm "Seçilmiş" jQuery eklentisi hakkında ipucu iyidir – user2436792

4

deneyin birden fazla değer kabul etmek için bir liste türüyle modelproperty değiştirmek için:

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

EvoNet tarafından iyi yanıt. Onun farklı bir yaklaşım ama benim için iyi çalıştı.http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

Ara:: İşte

bunu yapmak için Microsoftun resmi yoludur ben denedim

ve Evet: A aşağıdaki veritabanı şemada gösterildiği gibi masa Ancak veritabanında gereklidir katılmak tabloyu yarattı ancak tabloya yazmasını sağlamak için denetleyiciyi düzenlemeye başladım. Sonra da bir ilişkinin var olduğu durumlar için bir şeyler yaratmayı düşünmem gerekiyordu.

Bu yüzden benim için gayet iyi çalışan bu yönteme geçtim.