首页 > 解决方案 > 如何将带有模型类名称的下拉列表中的显示数据更改为保存在数据库中的真实数据?

问题描述

我在应用程序中有一对多的关系。我想使用 ViewBag 在视图中显示数据,但我得到的是模型类的路径名,而不是来自数据库的数据。我的代码:

public class Department
{
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    public ICollection<Instructor> Instructor { get; set; }
}

    [Key]
    public int InstructorId { get; set; }
    public string NameInstructor { get; set; }
    public string Email { get; set; }
    public string ScienceDegree { get; set; }
    public Department Department { get; set; }

控制器类:

[HttpGet]
    public ActionResult Create()
    {
        var item = db.Departments.ToList();
        ViewBag.DepartmentName = new SelectList(item, "DepartmentName");
        return View();
    }

查看类:

@Html.DropDownList("DepartmentName", new SelectList(ViewBag.DepartmentName, "DepartmentName"))

结果,我得到了它而不是名字。我也按照指南一步一步地做了,但它没有帮助,不幸的是我不知道该怎么做。 在此处输入图像描述

标签: c#asp.netasp.net-mvcentity-framework

解决方案


您需要将 SelectListItem 添加到您的 SelectList 而不是实际的部门列表中。您可以遍历您的列表,将每个项目转换为 SelectListItem,然后您可以将其添加到您的 SelectList 或使用通用方法。示例(考虑到您的部门列表包含两个名为 ID 和 Name 的属性,如果没有,您可以根据需要更改它们):

public static List<System.Web.Mvc.SelectListItem> GenerateSelectList<T>(this IEnumerable<T> itemsToBeAppended)
    {
        List<SelectListItem> items = new List<SelectListItem>();
        foreach (T itemToBeAppended in itemsToBeAppended)
        {
            SelectListItem item = new SelectListItem();
            var type = itemToBeAppended.GetType();

            item.Value = type.GetProperty("ID").GetValue(itemToBeAppended).ToString();
            item.Text = type.GetProperty("Name").GetValue(itemToBeAppended).ToString();
            items.Add(item);
        }
        return items.OrderBy(x => x.Text).ToList();
    }

推荐阅读