2012-01-13 47 views
7

'da Optgroup işlev için bir yardımcı kod Tüketici Yardımı ile çalışma deneyimim yok, bu yüzden eldeki kodu kullanarak takılı kaldım.Asp.net MVC

Benim gereksinim basit ve tek ihtiyacım olan şey, DropDownListFor uzantı yönteminde optgroup işlevselliği. Arama yaparken, bu Answer ile karşılaştım ve bunu MyExtensionClass.cs isimli dosyada olduğu gibi kopyaladım.

Ancak, bunu nasıl kullanacağımı bilmiyorum veya buna tanımlanan uzantı yöntemini çağırıyorum. Lütfen bana bunu listemle nasıl kullanabileceğimi söyle.

Şu anda, aşağıdaki uzantı yöntemlerini kullanmak istediğim bir seçim listesi için denetleyici kodudur.

ViewBag.ParentCategoryId = new SelectList(db.Categories, "Id", "Name"); 

Ve bu

@Html.DropDownListFor(model => model.Product.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.CategoryId, "---Choose Category---", 
     new { @class = "required" }) 

beni OPTGROUP ile uzatma yöntemi bu yükseltme yardım edin benim bakış kodudur.

+1

Şimdi [Açılır Listede Optgroup için MVC Desteği Bu Denetle] (http://www.jquery2dotnet.com/2014/01/html5-dropdownlist-optgroup-tag-in-mvc.html) – Sender

cevap

19

Serge Zab'ın yardımcısını grup açılır menüleri için kullanıyoruz. Burada bir örnek aşağıda verilmiştir:

ViewModel:

public class OurViewModel 
{ 
    public int? TypeId { get; set; } 
    public IEnumerable<GroupedSelectListItem> GroupedTypeOptions { get; set; } 
} 

kontrol:

public ActionResult Add() 
{ 
    var model = new OurViewModel 
    { 
     // fill with initial values 
    }; 
    PutTypeDropDownInto(model); 
    return View(model); 
} 

[NonAction] 
private void PutTypeDropDownInto(OurViewModel model) 
{ 
    model.GroupedTypeOptions = _repos.GetTypes() 
     .OrderBy(t => t.Category.EnglishName).ThenBy(t => t.EnglishName) 
     .Select(t => new GroupedSelectListItem 
     { 
      GroupKey = t.Category.RevisionId.ToString(), 
      GroupName = t.Category.EnglishName, 
      Text = t.EnglishName, 
      Value = t.RevisionId.ToString() 
     } 
    ); 
} 

görünüşüdür

@Html.DropDownGroupListFor(m => m.TypeId, Model.GroupedTypeOptions, 
    "[Select a type]") 

Normal bir SelectList kullanamayacağınızı unutmayın. GroupedSelectListItem sınıfının bir koleksiyonunu kullanmanız gerekiyor. Ayrıca, çözümümüz viewbag kullanmıyor. Açılan liste güçlü bir şekilde görünüm modeline yazılmıştır.

Güncelleme

görünümünüze çalışmaya html yardımcı almak için görünümü bulmak mümkün olmalıdır. Eğer MyExtensionClass.cs ad ile görünümünün üst kısmında bir @using yönergesini ekleyebilir veya şöyle, görünüme özgüdür web.config için ad ekleyebilir ya:

<pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="Microsoft.Web.Mvc" /> 
    <add namespace="Namespace.For.MyExtensionClass" /> 
    </namespaces> 
</pages> 
+0

teşekkürler mate :-) –

3

Bu ASP eklendi. NET MVC, 5.2 sürümünde! SelectListItem içinde

Mülkiyet Group şimdi öğelerin listede yer gruplarına dayalı optgroup elemanları üretmek her öğe

Html.DropDownList() ve DropDownListFor() için bir grup belirlemenizi sağlar.