Тег asp-for добавляет обязательную проверку поля для флажка в ядре asp.net

У меня есть основное приложение asp.net, и я пытаюсь добавить простой флажок без какой-либо проверки. Флажок привязан к логическому свойству модели. Ниже приведен код

модель

public class MyModel
{  
    public bool IsEmployee { get; set; }
}

cshtml

 <form>
   <div>
       <label asp-for="IsEmployee">Is Employee</label>
       <input type="checkbox" asp-for="IsEmployee"/>             
   </div>
   <button id="btnSave" class="btn btn-primary" type="button">Save</button>
 </form>
 <script src="~/js/test.js"></script>

Javascript

$(function () {
   var kendoValidator = $('form').kendoValidator().data("kendoValidator");
   $('#btnSave').click(function () {
    if (kendoValidator.validate()) {
        alert('true');
    }
    else {
        alert('false');
    }
   })
})

я использую asp-for помощник по тегам input элемент. Обратите внимание, что IsEmployee свойство НЕ имеет атрибута [Обязательный]. Но из-за asp-for помощник по тегам в рендеринге html data-val-required а также data-val атрибуты на input элемент. Это также добавляет еще один скрытый input элемент с тем же именем. Ниже представлен HTML. (Также обратите внимание, что я думаю, что это происходит только тогда, когда тип ввода установлен флажок. Для текстовых полей он работает нормально)

 <form novalidate="novalidate" data-role="validator">
    <div>
        <label for="IsEmployee">Is Employee</label>
        <input name="IsEmployee" id="IsEmployee" type="checkbox" value="true" data-val-required="The IsEmployee field is required." data-val="true">             
    </div>
    <button class="btn btn-primary" id="btnSave" type="button">Save</button>
    <input name="IsEmployee" type="hidden" value="false">
</form>

Я использую кендовалидатор, который добавляет data-role="validator" на элемент формы.

вопросы
Здесь есть 2 вопроса
1> Как только я нажимаю на флажок, появляется сообщение об ошибке, как The IsEmployee field is required.
2> Метод kendoValidator.validate() всегда возвращает false независимо от того, установлен флажок или нет.

Демо здесь JSFiddle

Обновление 2
Мы не можем привязать обнуляемый bool к флажку. Я использую ядро ​​asp.net. Я не уверен, что эквивалентный синтаксис в ядре asp.net для предложения здесь, который действителен для классического asp.net

1 ответ

Добавьте data-validate="false" в поле ввода флажка. KendoValidator будет игнорировать все входные данные с этим атрибутом, установленным на false.

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />     

Если вы не хотите генерировать HTML по умолчанию, у вас есть 2 варианта.

  1. Не используйте это! Вы не обязаны использовать помощники тегов, они нужны для тех случаев, когда вам нужны другие созданные атрибуты HTML. В этом случае просто используйте
  2. Измените поведение asp-for для вашего флажка. Вы можете сделать это либо путем создания собственного IHtmlGenerater, либо путем расширения DefaultHtmlGenerator и переопределения GenerateCheckBox и, возможно, GenerateInput, а затем зарегистрировать его с помощью чего-то вроде services.TryAddSingleton();

Надеюсь, это поможет вам.

Другие вопросы по тегам