Обязательные аннотации данных для Enum не работают на странице Razor - PullRequest
0 голосов
/ 01 апреля 2020

Когда я отправляю свою форму с нулевым именем, на моей странице появляется сообщение об ошибке на стороне клиента. Когда я отправляю с нулевым AttributeType, нет никаких ошибок на стороне клиента. Как я могу получить атрибут «Required» для работы с Enum?

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
}

Razor страница выглядит следующим образом:

<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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...