2016-12-26 2 views
-3
I have a table with: 
tbl_Category 
    Id  |   Name   |  ParentID 

    1     Category 1      0 
    2     Category 2      0 
    3     Subcategory 11     1 
    4     Subcategory 12     1 
    5     Subcategory 21     2 
    6     Subcategory 211     5 
    7     Subcategory 22     2 
......... 

How do I return it in a dropdownlist in the below format: 

Category 1 
--Subcategory 11 
--Subcategory 12 
--Subcatgory 13 
Category 2 
--Subcategory 21 
----Subcategory 211 
----Subcategory 212 
--Subcategory 22 
--Subcatgory 23 
Category 3 
--Subcategory 31 
--Subcategory 32 

ответ

0

Вы можете использовать HTML в вашем тексте так, например, попробовать:

Category1 
 Subcategory11 

и т.п. Таким образом, текст будет отступом право в соответствии с уровнем категории

+0

мне нужно, чтобы получить его в базе данных и отображения для просмотра. Как это сделать? –

0

Вспомогательный метод Html.DropDownListFor способен отображать элементы в группе. Вам просто нужно указать свойство Group для каждого SelectListItem.

var group1 = new SelectListGroup {Name = "Category 1"}; 
var group2 = new SelectListGroup { Name = "Category 2" }; 

var options= new List<SelectListItem> 
{ 
    new SelectListItem {Value = "1", Text = "Subcategory 11", Group = group1}, 
    new SelectListItem {Value = "2", Text = "Subcategory 12", Group = group1}, 
    new SelectListItem {Value = "3", Text = "Subcategory 21", Group = group2} 
}; 

Использование метода хелперов

@Html.DropDownListFor(s=>s.SomeProperty,options) 

или DropDownList помощник

@Html.DropDownList("MySelectName", options) 

Получение данных?

Если вы используете инфраструктуру Entity для доступа к данным, вы можете выполнить этот код, чтобы получить сгруппированные данные в вашем методе действий.

var db = new YourDbContextHere(); // Replace your db context class here 
var parentsDictionary = db.Categories 
          .ToDictionary(d => d.Id, v => v.Name); 

var groups = db.Categories.Select(x => x.Name) 
     .Select(f => new SelectListGroup() { Name = f }).ToList(); 

var itemsWithParents = (from c in db.Categories 
         join p in db.Categories 
         on c.ParentId equals p.Id 
         select new { Id = c.Id, 
            Text = c.Name, 
            ParentId = c.ParentId }).ToList(); 

var groupedData = itemsWithParents 
        .Where(f => f.ParentId != 0) 
        .Select(x => new SelectListItem 
           { 
           Value = x.Id.ToString(), 
           Text = x.Text, 
           Group = groups 
             .First(a => 
               a.Name == parentsDictionary[x.ParentId]) 
           }).ToList(); 
ViewBag.GroupedCategory= groupedData; 
return View(); 

Я использую ViewBag для передачи данных, предполагая, что у вас нет модели просмотра.

Теперь на ваш взгляд, использовать метод DropDownList помощника,

@Html.DropDownList("SelectedCategory",ViewBag.GroupedCategoryas List<SelectListItem>) 
+0

Мне нужно попасть в базу данных, использовать модель, контроллер, просмотреть ее. –

+0

Я не знаю, что такое технология доступа к данным. Так что не могу помочь – Shyju

+0

Я использую asp.net mvc 5. Модель получит данные из таблицы tbl_Category и покажет View –