4

我有 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-requireddata-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>

我也在使用 kendovalidator,它添加data-role="validator"了表单元素。

问题
这里有 2 个问题
1> 一旦我点击复选框,错误消息就会显示为The IsEmployee field is required.
2>kendoValidator.validate() 方法总是返回 false,无论是否选中了复选框。

在这里演示JSFiddle

更新 2
我们不能将可为空的布尔值绑定到复选框。我正在使用 asp.net 核心。我不确定 asp.net 核心中对于经典 asp.net的建议的等效语法是什么

4

2 回答 2

1

将 data-validate="false" 添加到复选框输入中。kendoValidator 将忽略该属性设置为 false 的所有输入。

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />     
于 2019-05-13T19:20:05.893 回答
0

如果您不想使用默认生成的 html,您有 2 个选择。

  1. 不要使用它!您不必强制使用标签助手,当您确实需要生成其他 html 属性时,它们就在那里。在这种情况下,只需使用 < input name="IsEmployee" ...>
  2. 更改asp-for对您的复选框的行为方式。您可以通过创建自己的IHtmlGenerater或通过扩展DefaultHtmlGenerator并覆盖 GenerateCheckBox 和可能的 GenerateInput 然后使用类似 services.TryAddSingleton(); 的东西注册它来做到这一点。

希望这对您有所帮助。

于 2016-11-01T15:13:16.797 回答