Asp-for标记在ASP.NET核心的复选框上添加所需的字段验证

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我有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-forinput元素上使用标签助手。请注意,IsEmployee属性没有[必需]属性。但由于asp-for标记助手所提供的HTML有data-val-requireddata-val对属性 input的元素。它还添加了一个具有相同名称的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>只要我点击复选框就会出现错误信息The IsEmployee field is required. 2> kendoValidator.validate()方法总是返回false,无论是否选中复选框。

在这里演示JSFiddle

更新2 我们无法将可空的bool绑定到复选框。我使用的是asp.net核心。我不知道在您的建议asp.net核心相当于语法这里有效期为经典的asp.net

提问于
用户回答回答于

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

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />     
用户回答回答于

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

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

希望这有助于你。

扫码关注云+社区

领取腾讯云代金券