C# 如何将模型类名称下拉列表中的显示数据更改为保存在数据库中的真实数据?
我在应用程序中有一对多关系。我想使用ViewBag在视图中显示数据,但我得到的不是数据库中的数据,而是模型类的路径名。我的代码:C# 如何将模型类名称下拉列表中的显示数据更改为保存在数据库中的真实数据?,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我在应用程序中有一对多关系。我想使用ViewBag在视图中显示数据,但我得到的不是数据库中的数据,而是模型类的路径名。我的代码: public class Department { public int DepartmentId { get; set; } public string DepartmentName { get; set; } public ICollection<Instructor> Instructor { get; set; } }
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; }
视图类:
@Html.DropDownList("DepartmentName", new SelectList(ViewBag.DepartmentName, "DepartmentName"))
结果,我得到的是它而不是名字。我也按照指南做了,一步一步,但没有帮助,不幸的是我不知道该怎么办。
请尝试使用部门ID而不是部门名称 @Html.DropDownListDepartmentId,新建SelectListViewBag.DepartmentName,DepartmentName
您需要将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();
}
ViewBag.DepartmentName=新建SelectListitem、DepartmentName、DepartmentName;和@Html.DropDownListDepartmentName,选择ListViewBag.DepartmentName,但也可以参考此选项,这也可能会有所帮助。
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();
}