c# - bool 字段的非侵入性客户端验证在 ASP.NET Core MVC 中不起作用

标签 c# asp.net-core asp.net-core-mvc asp.net-core-mvc-2.0

我在 ASP.NET Core 中发现了一个非常有趣的问题。我将我的 bool 字段用于复选框。我想强制用户选中要提交的表单的复选框。

我的模型类中的这个 bool 字段是:

[Range(typeof(bool), "true", "true", ErrorMessage = "You must accept the Terms")]
public bool TermsAccepted { get; set; }

注意我已经应用了 [Range] 验证属性。它完美服务器端验证

我的操作方法代码相当简单:

[HttpPost]
public IActionResult Index(JobApplication jobApplication)
{
    if (ModelState.IsValid)
        return View("Accepted", jobApplication);
    else
        return View();
}

But the problem is happening when I apply client side validation

在我看来,我应用了 3 个脚本:

@section scripts {
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js">
</script>
}

客户端验证的工作方式完全相反,当我选中复选框时它会给出错误消息。为什么会发生相反的情况?

复选框生成的 HTML 代码是:

<input type="checkbox" class="input-validation-error" data-val="true" data-val-range="You must accept the Terms" data-val-range-max="True" data-val-range-min="True" data-val-required="The TermsAccepted field is required." id="TermsAccepted" name="TermsAccepted" value="true" aria-describedby="TermsAccepted-error">

请帮忙?

最佳答案

我遇到了这个问题,你的代码添加了一些就没问题了......

我更新到最新版本的 jquery.validate (1.19.1) 和 jquery.validation.unobtrusive (3.2.11),(使用 libman 来管理这些依赖项)。

我还添加了这个 javascript block 来扩展该页面上验证器方法的功能。

 <script>
      // extend range validator method to treat checkboxes differently
      var defaultRangeValidator = $.validator.methods.range;
      $.validator.methods.range = function(value, element, param) {
        if(element.type === 'checkbox') {
          // if it's a checkbox return true if it is checked
          return element.checked;
        } else {
          // otherwise run the default validation function
          return defaultRangeValidator.call(this, value, element, param);
        }
      }
    </script>

关于c# - bool 字段的非侵入性客户端验证在 ASP.NET Core MVC 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234747/

相关文章:

c# - 'real'语句存在的 "GOTO"目的是性能提升吗?

c# - 如何在枚举中为相同的定义设置两个值,C#

linux - 使用 .Net Core Web API 在 linux VM 上安装 SSL 证书

.NET Core WebApi CSV文件解析并存储在数据库中

c# - 检查对象列表是否包含属性

c# - body 参数 'width' 。 GET 操作不能有主体?

asp.net-core - 从测试库启动主机进行集成测试抛出未实现的异常

c# - 使用 MVC Core 时将参数传递给 main 方法

c# - 具有父子关系的 Linq to sql 查询

javascript - 在 .NET core MVC 应用程序中包含带 @ 符号的 Javascript 库