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