EnumDropdown ListFor:显示默认文本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

在我看来我有一个下拉式(ASP.NETMVC5.1中的一个新特性)。

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

如果我执行上述代码,下面的枚举将得到下拉列表。

public enum LicenseTypes
{
    Trial = 0,
    Paid = 1
}

但默认情况下,我希望我的下拉列表有一个值(自定义文本),这就是我尝试过的

@Html.EnumDropDownListFor(m => m.SelectedLicense,"Select a license" ,new { @class="form-control"})

但现在的问题是,当我运行它时,我的下拉列表如下所示

因此,我想显示的默认文本在默认情况下不会出现。如果用户选择“选择许可”并尝试提交表单,它确实会显示一个错误,上面写着“选择许可”,但它不会显示为默认文本。我需要改变的东西?

PS:图片是页面加载时的截图。默认情况下,它将显示试用选项为所选选项。

提问于
用户回答回答于

尝试更改IndexLicenseTypes10如下所示:

public enum LicenseTypes
{
    Trial = 1,
    Paid = 2
}

然后你可以用Range attribute要验证所选许可类型,如下所示:

public class YourViewModel
{
     //Other properties
     [Range(1,int.MaxValue,ErrorMessage = "Select a correct license")]
     public LicenseTypes LicenseTypes { get; set; }
}

最后,你认为:

   @Html.EnumDropDownListFor(m => m.LicenseTypes,"Select a license",new { @class = "form-control"})
   @Html.ValidationMessageFor(m => m.LicenseTypes)
用户回答回答于

当你EnumDropDownListFor呈现SelectedLicense类型的默认值,即0

只需更改SelectedLicense属性为可空枚举,如下所示:

public LicenseTypes? SelectedLicense { get; set; }

这还允许你继续使用Required属性,我认为它非常干净。Required属性不允许空响应,因此即使模型允许空响应,表单也不允许空响应。

扫码关注云+社区

领取腾讯云代金券