ASP.NET中如何通过ViewBag传递LINQ拼接值到下拉列表?
解决建议
问题出在SelectList未指定要读取的文本字段,导致默认调用匿名对象的ToString()方法,显示出{ Name = harvey specter }这类格式的内容。可以通过两种方式修复:
方式一:修改视图代码
在SelectList构造函数中明确指定文本字段(和值字段,这里两者都用Name):
<div class="form-group"> <select class="form-control" asp-items="new SelectList(ViewBag.TranslatorList, "Name", "Name")"> <option>Select Translator</option> </select> </div>
方式二:在控制器中直接创建SelectList
提前在控制器里构造好SelectList,视图直接使用:
控制器代码修改:
var translators = bidsinfo1.Select(x => new { Name = x.TranslatorFirstName + " " + x.TranslatorLastName} ).ToList(); ViewBag.TranslatorList = new SelectList(translators, "Name", "Name");
视图代码修改:
<div class="form-group"> <select class="form-control" asp-items="@ViewBag.TranslatorList"> <option>Select Translator</option> </select> </div>
原理:SelectList通过指定DataTextField和DataValueField,会读取匿名对象的Name属性值来填充下拉选项的显示文本和对应值,而不再使用对象的默认字符串表示。
内容的提问来源于stack exchange,提问作者Lighto Gamer
相关产品推荐
相关产品推荐

