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

时间:2016-10-31 17:02:07

标签: asp.net-core asp.net-core-mvc coreclr tag-helpers kendo-validator

我有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-valinput属性。它还添加了一个具有相同名称的 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>

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

问题
这里有2个问题 1 GT;点击后,我会立即将错误消息显示为The IsEmployee field is required.
无论是否选中复选框,2&gt; kendoValidator.validate()方法始终返回false。

在这里演示JSFiddle

更新2
我们不能将可空的bool绑定到checkbox。我使用的是asp.net核心。我不确定asp.net核心中对于经典asp.net有效的建议here的等效语法

2 个答案:

答案 0 :(得分:0)

如果你不是默认生成的html,你有两个选择。

  1. 不要使用它!您不必使用标记帮助程序,当您需要生成其他html属性时,它们就在那里。在这种情况下,只需使用&lt;输入名称=“IsEmployee”...&gt;
  2. 更改 asp-for 对您的复选框的行为方式。您可以创建自己的IHtmlGenerater或扩展DefaultHtmlGenerator并覆盖GenerateCheckBox和可能的GenerateInput,然后将其注册为services.TryAddSingleton();
  3. 希望这有助于你。

答案 1 :(得分:0)

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

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />