下拉列表给出类名而不是值

时间:2018-05-29 12:16:51

标签: c# asp.net-mvc

我正在尝试从数据库表中填充下拉列表,并在我的控制器中使用此代码

model.EngineerNameList = new List<Engineers>();
foreach (string Engineer in allData.Select(x => x.EngineerName).Distinct().ToList())
{
    model.EngineerNameList.Add(new Engineers() { EngineerName = Engineer });
}

这是在我的下拉列表中返回正确数量的项目,但我得到的是我班上定义的班级名称

public partial class Engineers
{
    public int ID { get; set; }

    [StringLength(100)]
    public string EngineerName { get; set; }
}

我使用以下

在我的视图中显示
 <div class="form-group">
    <label for="Engineer">Select Engineer:</label>
    <select id="Name" name="Name" onchange="this.form.submit()">
        @if (Model.EngineerNameList != null)
        {
            foreach (var Title in Model.EngineerNameList)
            {
            <option value="@Title" >@Title </option>
            }
        }
        </select>
</div>

我的问题是我无法将类中包含的值放入下拉列表中。这就是我在页面上的内容:

requestReview()

2 个答案:

答案 0 :(得分:0)

EngineerNameListEngineers模型的集合,因此当您迭代它时,您将获得Engineers的对象。这就是您在下拉列表中看到模型的ToString()表示的原因。

因此,要显示相应的工程师名称,请将代码更新为

<option value="@Title.EngineerName">@Title.EngineerName</option>

答案 1 :(得分:0)

您也可以在MVC中使用此类型与剃刀助手

 <select id="Name" name="Name" onchange="this.form.submit()">
    @if (Model.EngineerNameList != null)
    {
        foreach (var Title in Model.EngineerNameList)
        {
       <option value="@Title.EngineerName">@Title.EngineerName</option>
        }
    }
    </select>

可以替换为

@Html.DropDownListFor("EngineerName", Model.EngineerNameList.Select(Title => new SelectListItem { Text = Title.EngineerName, Value = Title.EngineerName.ToString() }))

渲染后它也会反映相同的HTML代码......