修改MVC 5中的下拉列表项

本文关键字:下拉列表 MVC 修改 | 更新日期: 2023-09-27 18:12:34

我真的很困惑如何下拉列表在MVC

我基本上有一个表Employee它有EmployeeID和EmployeeReportsToID。因此,每当我编辑/创建员工时,我想要为字段EmployeeReportsToID创建下拉列表,其中的项目来自员工表本身。

下面是我的代码,它运行良好。

控制器

ViewBag.EmployeeReportsToID = new SelectList(db.Employees.ToList(), "Employeeid", "Description", Employee.EmployeeReportsToID);
视图

<div class="col-md-10">@Html.DropDownList("EmployeeReportsToID", null, htmlAttributes: new { @class = "form-control" })  </div>

现在我有几个问题

  1. 下拉列表如何知道从哪里带来的项目。我在下拉列表中的参数为空。

  2. 如何修改下拉列表中的项目我基本上想添加员工标题到他们的名字手动基于一些字段在同一表。例如,项目可以如下所示:

员工1 -销售经理

员工2 - VP

员工3 -开发人员

员工4 -开发人员

员工5 -软件经理

修改MVC 5中的下拉列表项

ViewBag:

ViewBag.EmployeeReports = new SelectList(db.Employees.ToList()), "Employeeid", "Description");

对于填充您的下拉列表,您可以使用此扩展方法并设置任何您想要的文本:

public static IList<SelectListItem> ToSelectList<T>(this IEnumerable<T> itemsToMap, Func<T, string> textProperty, Func<T, string> valueProperty, Predicate<T> isSelected)
{
    var result = new List<SelectListItem>();
    foreach (var item in itemsToMap)
    {
        result.Add(new SelectListItem
        {
            Value = valueProperty(item),
            Text = textProperty(item),
            Selected = isSelected(item)
        });
    }
    return result;
}

然后你调用这个方法:

ViewBag.EmployeeReports = db.Employees.ToList().ToSelectList(m => m.EmployeeId + " - " + m.EmployeeName, m.Id.ToString(), m => m.Id < -1);

视图:

@Html.DropDownList("EmployeeReportsToID", (SelectList)ViewBag.EmployeeReports, "-- Select ---", new { id= "reqType", @class = "form-control" })

  1. 在下面的代码中,EmployeeReportsToID告诉从哪里获取列表。

    @Html.DropDownList("EmployeeReportsToID", null, htmlAttributes: new { @class = "form-control" })

    EmployeeReportsToID作为数据源。实际上,如果您使用强类型视图,您可以使用其他html助手DropdownListFor。如下所示

    @Html.DropDownListFor(m => m.EmployeeReportsToID, Model.EmployeeReports, "Select one")

  2. 试试这个代码

    ViewBag.EmployeeReportsToID = = Employee.Select(x => new SelectListItem() { Text = x.EmployeeReportToId+" - "+x.EmployeeTitle, Value = x.EmployeeReportToId }); return list.ToList();

第一部分

当您将null提供给DropDownList()的第二个参数时,该方法返回到搜索ViewDataDictionary以查找与第一个参数匹配的属性,如果该属性(在您的示例中为EmployeeReportsToID)是IEnumerable<SelectListItem>(它是),它将使用它。

2 .

部分

您可以生成SelectListItems的集合并设置Text属性

ViewBag.EmployeeReportsToID = new db.Employees.Select(e => new SelectListItem
{
  Value = e.Employeeid.ToString(), // assumes its typeof int
  Text = e.Description + " - " + e.SomeOtherProperty
});

但是,建议您使用强类型帮助器来绑定到模型中的属性。例如,如果视图中的模型有一个属性(比如)int EmployeeReportsToID,那么

ViewBag.EmployeeList = new SelectList(db.Employees, "Employeeid", "Description"); // do not need .ToList()

和视图

@Html.DropDownListFor(m => m.EmployeeReportsToID, (SelectList)ViewBag.EmployeeList, "Please select")