【问题标题】:asp-for tag adds required field validation on checkbox in asp.net coreasp-for 标记在 asp.net 核心中的复选框上添加必填字段验证
【发布时间】:2017-03-13 19:35:20
【问题描述】:

我有 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 属性。它还增加了一个 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"

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

在这里演示JSFiddle

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

【问题讨论】:

  • 嗨@LP13,你找到解决这个问题的方法了吗,我现在也面临同样的问题。

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


【解决方案1】:

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

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

希望对你有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 对我来说这行得通(谢谢!),但属性名称必须是data-val(而不是data-validate
    猜你喜欢
    • 2017-10-31
    • 2019-02-07
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多