我有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');
}
})
})
我在input
元素上使用asp-for
标签助手。注意IsEmployee
属性没有[Required]属性。但是由于asp-for
标签帮助,渲染的html在input
元素上具有data-val-required
和data-val
属性。它还添加了一个具有相同名称的隐藏 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>
我也使用kendovalidator,它在表单元素上添加了data-role="validator"
。
这里有两个问题
1>只要我点击复选框错误信息显示为The IsEmployee field is required.
kendoValidator.validate()方法总是返回false,不管复选框是否被选中。
此处演示JSFiddle
更新2
不能将可空bool值绑定到复选框。我使用的是asp.net core。我不确定这里的建议在asp.net core中的等效语法是什么这对经典asp.net
将data-validate="false"添加到复选框输入。kendoValidator将忽略所有将该属性设置为false的输入。
<input type="checkbox" asp-for="IsEmployee" data-validate="false" />
如果你不想要默认生成的html,你有两个选择。
- 不要用!您不需要强制使用标记帮助器,当您确实需要生成其他html属性时,它们就在那里。在这种情况下,只需使用<>
- 改变asp-for复选框的行为方式。你可以通过创建你自己的IHtmlGenerater或扩展DefaultHtmlGenerator并覆盖GenerateCheckBox和可能的GenerateInput,然后注册它类似于services.TryAddSingleton();