Asp-for标签在asp.net core的复选框上添加了必需的字段验证



我有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-requireddata-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,你有两个选择。

  1. 不要用!您不需要强制使用标记帮助器,当您确实需要生成其他html属性时,它们就在那里。在这种情况下,只需使用<>
  2. 改变asp-for复选框的行为方式。你可以通过创建你自己的IHtmlGenerater或扩展DefaultHtmlGenerator并覆盖GenerateCheckBox和可能的GenerateInput,然后注册它类似于services.TryAddSingleton();

相关内容

  • 没有找到相关文章

最新更新