Тег 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. Он также добавляет еще один элемент hiddden 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
Мы не можем привязать значение nullable bool к флажку. Я использую ядро ​​asp.net. Я не уверен, какой эквивалентный синтаксис в ядре asp.net для предложения здесь, что действительно для классического asp.net


person LP13    schedule 31.10.2016    source источник
comment
Привет @ LP13, вы нашли решение этой проблемы, сейчас я сталкиваюсь с тем же.   -  person chinh nguyen van    schedule 16.09.2020


Ответы (2)


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

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />     
person John81    schedule 13.05.2019
comment
Для меня это сработало (спасибо!), Но имя атрибута должно быть data-val (вместо data-validate) - person Xymanek; 14.07.2020

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

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

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

person korn3l    schedule 01.11.2016