C# 在.NETCore2.0中使用MVC6选择不显示占位符的标记

C# 在.NETCore2.0中使用MVC6选择不显示占位符的标记,c#,asp.net-mvc,C#,Asp.net Mvc,我正在将visual studio的自定义web应用程序模板改为使用.Net Core和MVC 6 在我的注册屏幕上,我的性别下拉列表将不会显示“选择性别”,这无疑是因为MVC6标签与MVC5标签的工作方式略有不同 在我当前的模板中,使用下面的代码可以完美地工作并显示如图所示 @Html.DropDownListFor(m => m.Gender, new SelectList(Enum.GetValues(typeof(Gender))),

我正在将visual studio的自定义web应用程序模板改为使用.Net Core和MVC 6

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

在我当前的模板中,使用下面的代码可以完美地工作并显示如图所示

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

我尝试了几个不同的迭代,但要么出现错误,要么下面显示的当前版本有效,但没有显示“选择性别”

MVC6版本

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

  </select>


有人能告诉我如何在MVC6版本中显示“选择性别”吗?

您需要在
标记中手动添加null
元素

<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>

选择性别

作为旁注,您还可以使用
asp items=“Html.GetEnumSelectList()”>
而不是
asp items=“@(新的SelectList(Enum.GetValues(typeof(Gender))
,它还具有尊重任何
[Display]
属性应用于
Enum
值的额外优势,这意味着我可以添加一个在我的枚举中选择“性别”属性并向其添加[Display]属性,然后建议的版本将自动使用该属性作为初始默认显示值?不,您不会将“SelectGender”添加为枚举的属性。您可以根据我的答案添加该属性。我答案的第二部分表示您可以执行,例如,
公共枚举性别{Male,Female,[Display(Name=“Trans Person”)]TransPerson}
第三个选项将被显示为带有空格的“Trans Person”。是的,我理解手动添加的select选项。您的旁注说“这还有一个额外的优点,即尊重适用于枚举值的任何[Display]属性”。您能详细说明显示属性的用法吗?请参见我前面的注释以获取示例