c# - 如何将带有模型类名称的下拉列表中的显示数据更改为保存在数据库中的真实数据?
问题描述
我在应用程序中有一对多的关系。我想使用 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"))
解决方案
您需要将 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();
}
推荐阅读
- google-cloud-platform - 查找与存储桶关联的服务帐户的权限
- c++ - C++ 访问基于 1 而不是 0 的数组,通过在编译时移位
- amazon-web-services - CloudFormation 通行证标签
- java - 在 dynamoDB AWS 的 for 循环中保存数据
- c# - 有没有办法在忽略空格的同时使用 OrderBy 对字符串进行排序?
- java - Java条码生成器
- docker - 在 /var/www/html 中挂载一个卷并且找不到路径
- splunk - Splunk 查询不包含文本的匹配行
- r - 如何在 R 中过滤大型 geojson 文件
- google-cloud-firestore - Firebase Cloud Function 和多个请求