Enum的必需DataAnnotation在Razor页面中不起作用

时间:2020-04-01 16:56:50

标签: asp.net-core razor

当我使用空名称提交表单时,页面上会出现客户端错误消息。当我使用空的AttributeType提交时,没有客户端错误。如何获得“必需”属性才能使用枚举?

public class AttributeName
{
    [Required(ErrorMessage = "Attribute Type is required")]
    public Enums.AttributeType? AttributeType { get; set; }

    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }
}

为澄清起见,当我尝试提交带有空AttributeType的表单时,它确实创建了ModelState错误,但是客户端验证并没有阻止它发布到页面处理程序。另一方面,当我使用空名称提交时,客户端验证会阻止其发布到页面处理程序。

枚举构造函数如下:

public enum AttributeType
{
    List = 1,
    Text = 2,
    Number = 3,
    Decimal = 4
}

剃须刀页面如下:

<div class="row">
    <div class="col-12 form-group">
        <label asp-for="AttributeName.AttributeType"></label>
        <select asp-for="AttributeName.AttributeType" asp-items="Model.AttributeTypeList">
            <option>Select:</option>
        </select>
        <span asp-validation-for="AttributeName.AttributeType" class="text-danger"></span>
    </div>
</div>
<div class="row">
    <div class="col-12 form-group">
        <label asp-for="AttributeName.Name"></label>
        <input asp-for="AttributeName.Name" />
        <span asp-validation-for="AttributeName.Name" class="text-danger"></span>
    </div>
</div>

这是我填充AttributeType列表的方式:

AttributeModel.AttributeTypeList = WebUtil.GetEnumValues<Enums.AttributeType>();

public static List<SelectListItem> GetEnumValues<T>()
        {
            return Enum.GetNames(typeof(T)).Select(x => new SelectListItem { Text = Regex.Replace(x, "([A-Z])", " $1").Trim(), Value = ((int)Enum.Parse(typeof(T), x)).ToString() }).ToList();
        }

0 个答案:

没有答案