首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SelectList与SelectListGroup

SelectList与SelectListGroup
EN

Stack Overflow用户
提问于 2016-03-31 20:56:28
回答 1查看 19.5K关注 0票数 10

我试图返回一个使用SelectList<optgroup>SelectListGroup,但是下面的代码只返回SelectList中的值而不返回组。如何将我的选择列表按组分隔?

代码语言:javascript
复制
public SelectList MyList()
{
   var group1 = new SelectListGroup() { Name = "Group 1" };
   var group2 = new SelectListGroup() { Name = "Group 2" };

   var items = new List<SelectListItem>();

   items.Add(new SelectListItem() { Value = "1", Text = "Item 1", Group = group1 });
   items.Add(new SelectListItem() { Value = "2", Text = "Item 2", Group = group2 });

   return new SelectList(items, "Value", "Text");
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-27 11:00:29

我发现这个方法有效,它使用了一种强类型的方法:

视图模型:

代码语言:javascript
复制
public class PageViewModel
{
    public int SelectedDropdownItem { get; set; }
    public IEnumerable<SelectListItem> DropdownList { get; set; }
}

示例实体模型(在本例中):

代码语言:javascript
复制
public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
    public bool IsDefault { get; set; }
}

控制器:

代码语言:javascript
复制
// Get list for the dropdown (this uses db values)
var entityList = db.Entity.ToList();

// Define the Groups
var group1 = new SelectListGroup { Name = "Active" };
var group2 = new SelectListGroup { Name = "Allowed" };

// Note - the -1 is needed at the end of this - pre-selected value is determined further down
// Note .OrderBy() determines the order in which the groups are displayed in the dropdown
var dropdownList = new SelectList(entityList.Select(item => new SelectListItem
{
    Text = item.Name,
    Value = item.Id,
    // Assign the Group to the item by some appropriate selection method
    Group = item.IsActive ? group1 : group2
}).OrderBy(a => a.Group.Name).ToList(), "Value", "Text", "Group.Name", -1);

// Assign values to ViewModel
var viewModel = new PageViewModel
{
    // Assign the pre-selected dropdown value by appropriate selction method (if needed)
    SelectedDropdownItem = entityList.FirstOrDefault(a => a.IsDefault).Id,
    DropdownList =  dropdownList
};

视图:

代码语言:javascript
复制
<!-- If needed, change 'null' to "Please select item" -->
@Html.DropDownListFor(a => a.SelectedDropdownItem, Model.DropdownList, null, new { @class = "some-class" })

希望它能帮到别人。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36343620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档