如何配置SelectList,使下拉列表同时显示FirstName与LastName?
解决方法
有两种常用方式实现下拉列表显示FirstName和LastName的组合文本:
方法1:给实体类添加计算属性
如果Producer和Actor实体类可以修改,直接添加一个返回全名的计算属性,后续所有需要显示全名的地方都能复用:
// Producer类示例 public class Producer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } // 添加计算属性 public string FullName => $"{FirstName} {LastName}"; } // Actor类同理添加FullName属性
然后修改你的Create方法,把SelectList的文本字段换成FullName:
public async Task<IActionResult> Create() { var movieDropdownsData = await _service.GetNewMovieDropdownsValues(); ViewBag.Cinemas = new SelectList(movieDropdownsData.Cinemas, "Id", "Name"); ViewBag.Producers = new SelectList(movieDropdownsData.Producers, "Id", "FullName"); ViewBag.Actors = new SelectList(movieDropdownsData.Actors, "Id", "FullName"); return View(); }
方法2:使用LINQ投影生成匿名对象(无需修改实体类)
如果不想改动实体类,可以在获取数据后,通过LINQ将每个对象投影成包含Id和组合名称的匿名对象:
public async Task<IActionResult> Create() { var movieDropdownsData = await _service.GetNewMovieDropdownsValues(); ViewBag.Cinemas = new SelectList(movieDropdownsData.Cinemas, "Id", "Name"); // 处理Producers ViewBag.Producers = new SelectList( movieDropdownsData.Producers.Select(p => new { p.Id, FullName = $"{p.FirstName} {p.LastName}" }), "Id", "FullName" ); // 处理Actors ViewBag.Actors = new SelectList( movieDropdownsData.Actors.Select(a => new { a.Id, FullName = $"{a.FirstName} {a.LastName}" }), "Id", "FullName" ); return View(); }
两种方法对比
- 方法1适合需要在多个地方显示全名的场景,代码复用性高,维护更方便。
- 方法2适合临时需求,不需要修改实体类,快速实现效果。
内容的提问来源于stack exchange,提问作者Tudor G
相关产品推荐
相关产品推荐

