ASP.NET MVC中DropdownList显示类名而非属性值的问题求助
解决DropdownList显示类名而非属性值的问题
兄弟,你这个问题其实很好解决——你在View里直接输出了整个Engineers对象,而不是它的EngineerName属性,C#默认会对对象调用ToString()方法,所以就显示了类的全名。
直接修复:修改View中的Option代码
把你View里的这行代码:
<option value="@Title" >@Title </option>
改成明确指定EngineerName属性:
<option value="@Title.EngineerName" >@Title.EngineerName </option>
这样下拉框的显示文本和value值都会正确显示工程师的名字。
优化Controller代码(可选)
你现在的Controller代码可以用LINQ简化,不用手动foreach循环,一行搞定:
model.EngineerNameList = allData .Select(x => x.EngineerName) .Distinct() .Select(name => new Engineers { EngineerName = name }) .ToList();
这样代码更简洁,可读性也更好。
推荐:使用MVC内置的Html辅助方法(更规范)
ASP.NET MVC提供了Html.DropDownListFor辅助方法,能更方便地生成下拉列表,还能自动绑定选中值,推荐你这么用:
- 首先在你的Model里添加一个接收选中值的属性:
public string SelectedEngineerName { get; set; }
- 然后在View里替换原来的select标签:
<div class="form-group"> <label for="Engineer">Select Engineer:</label> @Html.DropDownListFor(m => m.SelectedEngineerName, new SelectList(Model.EngineerNameList, "EngineerName", "EngineerName"), "Select an Engineer", new { @class = "form-control", onchange = "this.form.submit()" }) </div>
这里SelectList的第二个参数是option的value值对应的属性,第三个是显示文本对应的属性,这样就完全不用手动循环了,代码更简洁也不容易出错。
内容的提问来源于stack exchange,提问作者Colin O'Donoghue
相关产品推荐
相关产品推荐

