下拉菜单中有2个空值?

时间:2017-04-05 14:11:00

标签: c# asp.net-mvc

在我的下拉列表中只有一个简短的问题,有两个空值,然后男性和女性,我只是想知道为什么这些空值出现,我还离开了性别?所以,选择默认为空。请指教。

public class PatientRegistrationViewModel
{
    [Required(ErrorMessage = "Please select your gender.")]
    public Gender? GGender
    { get; set; }

    public enum Gender
    {
        [Display(Name = "Male", Order = 0)]
        Male = 0,

        [Display(Name = "Female", Order = 1)]
        Female = 1

    }
}

查看

<div class="row">
   <div class="col-md-6">
       <!--<i class="fa fa-child" aria-hidden="true"></i>-->
       @Html.LabelFor(model => model.GGender, "Choose your gender:", new { @style = "", @class = "", id = "" })
       <span style="color: red;">*</span>
       @*@Html.DropDownListFor(model => model.Profession, new SelectList(Model.Professions, "Id", "Name"), new { placeholder = "", @style = "", @class = "form-control", id = "Profession" })*@
       @Html.EnumDropDownListFor(model => model.GGender, "", new { @class = "form-control" })
       @Html.ValidationMessageFor(model => model.GGender)
   </div>
</div>

2 个答案:

答案 0 :(得分:0)

虽然数据是空的,但你看到的是文本或标签而不是值。和 public enum Gender方法将其显示为此(男性或女性)。

  • 要测试 - 不显示文本,然后从中删除名称 display name = ""现在不会显示文字。

  • 您可以通过 html inspect来测试它们是否有价值。

Help example here!

答案 1 :(得分:0)

问题原因
第一个空值将来自此方法调用的第二个参数

@Html.EnumDropDownListFor(model => model.GGender, "", new { @class = "form-control" })

这里你传递的是一个空字符串,当没有选择任何内容时必须出现这个值(我假设你已经知道了)

这很容易,所以第二个空值来自哪里?
它来自您的属性GGender,其类型为Nullable<Gender>而非Gender,因此实际上此属性有三个可能的值

  1. Null (在select html元素中呈现为第二个空值)
  2. 解决方案
    如果您希望默认情况下从select HTML元素中选择任何内容 你必须将你的财产改为以下

    [Required(ErrorMessage = "Please select your gender.")]
    public Gender? GGender { get; set; } = null;
    

    和您在视图中的电话

    @Html.EnumDropDownListFor(model => model.GGender.Value, "Please Select gender ...", new { @class = "form-control" })