在 .Net Core 2.0 中使用 MVC6 选择标签不显示占位符

din*_*tom 2 c# asp.net-mvc

我正在为 Visual Studio 更改我的自定义 Web 应用程序模板以使用 .Net Core 和 MVC 6。

在我的注册屏幕上,我的性别下拉列表不会显示“选择性别”,这无疑是因为 MVC 6 标签与 MVC 5 的工作方式略有不同。

在我当前的模板中,使用下面的代码完美运行并显示如下

 @Html.DropDownListFor(m => m.Gender,
                       new SelectList(Enum.GetValues(typeof(Gender))),
                       "Select Gender",
                       new
                          {
                             @class = "form-control",
                             id = "validation-gender"
                          })
Run Code Online (Sandbox Code Playgroud)

注册性别正确

我尝试了一些不同的迭代,但要么出错,要么下面显示的当前版本有效,但不显示“选择性别”。

MVC 6 版本

 <select asp-for="Gender" class="form-control" id="validation-gender" 
         asp-items="@(new SelectList(Enum.GetValues(typeof(Gender)),"Select Gender"))">

  </select>
Run Code Online (Sandbox Code Playgroud)

注册性别不正确

有人可以告诉我如何让“选择性别”显示在 MVC 6 版本中?

小智 8

您需要<option><select>标签中手动添加空元素

<select asp-for="Gender" class="form-control" id="validation-gender" 
    asp-items="@(new SelectList(Enum.GetValues(typeof(Gender)),"Select Gender"))">
    <option value="">Select Gender</option>
</select>
Run Code Online (Sandbox Code Playgroud)

作为旁注,您还可以使用asp-items="Html.GetEnumSelectList<Gender>()">代替asp-items="@(new SelectList(Enum.GetValues(typeof(Gender))which 还具有尊重[Display]适用于您的enum值的任何属性的额外优势