DropDownlistFor MVC 4中的Optgroup?

时间:2014-07-13 19:51:55

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我需要在MVC 4中对DropDownListFor内的元素进行分组。

我有几个下拉列表作为团队和项目。基于团队我得到的项目我有一个表作为项目,其中包含一个名为entitytype的列。有3个实体类型作为客户,分配和项目。

我已经编写了一个查询来获取基于团队的项目。现在我想基于 entitytype 对项目进行分组。

例如,对于Team1,有5个项目作为2个客户,2个任务和1个项目。因此,它应显示为:

在第一个下拉列表中:

  • 团队:Team1

在第二个下拉列表中:

  • 项目:

    1. 客户
    2. 客户1
    3. 客户2

  • 分配:

    1. 作业1
    2. 作业2

  • 项目:

    1. 项目1

我对此进行了大量搜索,但由于我得到了很多结果,因为大部分内容都像框架一样不支持任何扩展,所以应该编写自定义的扩展名。

我的要求很简单:我需要将查询结果分为三个类别:客户端,位于“分配”下方和“项目”旁边。 具有entitytype 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();
        }

以下是我用于下拉列表的剃刀代码:

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

所以,这就是我的问题所在。任何帮助都会受到赞赏。我已经花了很多时间在这里,但不会导致任何结果。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

正如@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

起初,扩展或创建自己的帮助者似乎令人生畏,但是它的时间和精力都很值得。如果您可以进行此类自定义,它可以为更复杂的项目节省大量头痛和代码。

答案 1 :(得分:0)

没有这样的选项将DataGroupField添加到MVC 4

虽然从MVC 5甚至在Asp.net Core中,我们都可以选择dataGroupField,您可以轻松地将其用于实现

FYI 对于MVC Core App,您可以找到以下SeleclLiat变体,如下所示

public SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue, string dataGroupField);

另一个建议是使用传统编码生成select元素,然后根据您的要求使用Multiselect jquery插件

检查一下: - https://forums.asp.net/t/1743600.aspx?How+to+create+optGroup+from+multiselect+selectList+