我需要在MVC 4的DropDownListFor
中对元素进行分组。
我有几个下拉菜单,分别是团队和项目。在团队的基础上,我得到了一些项目,这些项目有一个表作为项目,其中包含称为实体类型的列。有3种实体类型,分别是客户,工作分配和项目。
我写了一个查询来获取基于团队的项目。现在,我想根据实体类型对项目进行分组。
例如,对于Team1,有5个项目作为2个客户,2个任务和1个项目。因此,它应显示为:
在第一个下拉列表中:
在第二个下拉列表中:
我对此进行了很多搜索,但由于得到了很多结果而完全感到困惑,因为它们中的大多数都好像框架不支持此扩展,因此应该编写自定义的扩展。
我的要求很简单:我只需要将查询结果分为三类,分别是“客户”,“作业”下方和“项目”旁边。
一个实体类型为Client的实体应属于该实体,其他实体则应属于该实体。
以下是我根据团队获取项目的代码:
public List<Project> GetAllProjectForTeam(int teamId)
{
List<Project> project = new List<Project>();
var query = (from p in db.Projects.AsEnumerable()
join pt in db.ProjectTeams.AsEnumerable() on p.ProjectId equals pt.ProjectId
join tm in db.Teams.AsEnumerable() on pt.TeamId equals tm.TeamId
where pt.TeamId == teamId
select p
).ToList();
project = query.Distinct().ToList<Project>();
return project.ToList();
}
以下是我的下拉菜单的 Razor 代码:
<div class="editor-label">
@Html.LabelFor(model => model.TeamId,"Team")
</div>
<div class="cssclass">
@Html.DropDownListFor(model => model.TeamId, new SelectList(Model.ddlTeam, "Value", "Text"), "Select Team", new { id = "TeamID", onchange = "GetProjects()", @class = "form-control", UpdateTargetId = "atag" })
@Html.ValidationMessageFor(model => model.TeamId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ProjectId, "Project")
</div>
<div class="cssclass">
@Html.DropDownListFor(model => model.ProjectId, new SelectList(Model.ddlProject, "Value", "Text"), "Select Project", new { id = "ProjectID", onchange = "ShowDocsList()", @class = "form-control" })
@Html.ValidationMessageFor(model => model.ProjectId)
</div>
所以,这就是我的问题。任何帮助将不胜感激。我已经花了很多时间在此上,但没有导致任何结果。
提前致谢。
最佳答案
正如@EdSF所暗示的那样,还没有Html帮助器允许dropDownList的选项组。详细信息:http://www.kashyapas.com/2014/06/09/html-ldquooptgrouprdquo-support-in-dropdownlist-asp-net-mvc-5-2/。
如果您不想下载RC,则始终可以创建自己的自定义帮助程序来添加对分组下拉列表的支持。示例:http://weblogs.asp.net/raduenuca/asp-net-mvc-extending-the-dropdownlist-to-show-the-items-grouped-by-a-category
最初,扩展或创建自己的助手似乎很艰巨,但是时间和精力是值得的。如果您可以进行这种类型的自定义,则可以减轻繁重的项目负担,并且可以省去编写更复杂项目的代码。
关于c# - 适用于MVC 4的DropDownlist中的Optgroup?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24726553/