客户端列表的 MVC 自定义验证

2024-03-29

我正在尝试编写一个在客户端工作的自定义验证器,用于验证所有复选框是否已被选中。

这是模型的声明:

[DeclarationsAccepted(ErrorMessage = "You must tick all declarations")]        
    public IList<DeclarationQuestion> DeclarationQuestions { get; set; }

这是属性:

public class DeclarationsAccepted : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {

        var questions = value as IList<DeclarationQuestion>;

        if (questions != null && questions.All(c => c.Answer))
        {
            return ValidationResult.Success;
        }
        return new ValidationResult("You must accepted all declarations to continue");
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ValidationType = "declarationsaccepted",
            ErrorMessage = FormatErrorMessage(metadata.DisplayName)
        };            
        yield return modelClientValidationRule;
    }
}

到目前为止一切顺利,可以在服务器端运行。

对于客户,我将其连接如下:

jQuery.validator.addMethod('declarationsaccepted', function (value, element, params) {

        //Implement logic here to check all boxes are ticked
        console.log(value);

        return false;
    }, '');


    jQuery.validator.unobtrusive.adapters.add('declarationsaccepted', {}, function (options) {
        options.rules['declarationsaccepted'] = true;
        options.messages['declarationsaccepted'] = options.message;
    });

我显示这样的复选框:

@{ var questionIndex = 0; }
        @foreach (var question in Model.DeclarationQuestions)
        {

                @Html.CheckBoxFor(model => Model.DeclarationQuestions[questionIndex].Answer, new { id = "DeclarationQuestions" + questionIndex})

            questionIndex++;
        }

然后使用以下命令显示验证消息:

@Html.ValidationMessageFor(c => c.DeclarationQuestions)

当我提交表单时,消息才会显示,但只有在回发到服务器之后才会显示。有什么办法让它在客户端工作吗?


您无法获得客户端验证的原因是因为 html 帮助程序生成data-val-*与属性关联的控件的属性。jquery.validate.unobtrusive解析表单时读取这些属性并使用规则,在由生成的适当元素中显示错误消息ValidationMessageFor()与该控件关联(它通过匹配id元素的属性 - 错误消息在跨度中生成<span for="TheIdOfTheAssociatedControl" ...>).

您不(也不能)生成属性控件DeclarationQuestions(仅适用于每个项目的属性DeclarationQuestions所以没有什么可以匹配的。

您可以通过包含自己的错误消息占位符并拦截来处理此问题.submit event

html(将css添加到样式#conditions-error as display:none;)

<span id="delarations-error" class="field-validation-error">
  <span>You must accept all declarations to continue.</span>
</span>

Script

var declarationsError = $('#delarations-error');
$('form').submit(function() {
  var isValid = $('.yourCheckBoxClass').not(':checked') == 0;
  if(!isValid) {
    declarationsError.show(); // display error message
    return false; // prevent submit
  }
});

$('.yourCheckBoxClass').change(function() {
  if($(this).is(':checked')) {
    declarationsError.hide(); // hide error message
  }
});

旁注:用于生成复选框的循环应该是

for (int i = 0; i < Model.DeclarationQuestions.Count; i++)
{
  @Html.CheckBoxFor(m => m.DeclarationQuestions[i].Answer, new { id = "DeclarationQuestions" + i})
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端列表的 MVC 自定义验证 的相关文章

  • MVC 4 使用 Bootstrap 编辑模态表单

    我正在使用 MVC 4 和实体框架来开发 Intranet Web 应用程序 我有一个可以通过编辑操作进行修改的人员列表 我想通过使用模态表单使我的应用程序更加动态 所以我尝试将我的编辑视图放入我的 Bootstrap 模式中 我有两个问题
  • 使用 jqGrid 的 ASP.NET MVC 路由

    我正在尝试创建一个指向 url 的链接 例如首页 详情 1在 jqGrid 列中 文档显示 showlink baseLinkUrl showAction show addParam key 2 注意 addParam 应该包含 例如 格式
  • 为什么我在使用 MVC4 时会收到“无效的对象名称 'dbo.*'”错误?

    我收到此错误 对象名称 dbo ImageMetas 无效 在这一行 返回视图 db Images ToList 我的数据库上下文如下所示 public class GalleryContext DbContext public Galle
  • 具有通用存储库、依赖项注入和 SoC 的 EF6 Code First

    经过大量阅读和尝试之后Entity Framework最新稳定版本 6 1 1 我读到了很多关于是否使用存储库的矛盾EF6 or EF一般来说 因为它是DbContext已经提供了一个存储库并且DbSet the UoW 盒子外面 让我首先
  • 使用 asp.net mvc 在 Dropbox 中下载文件

    我正在使用 ASP net MVC 4 和 Dropbox API 从我的 Dropbox 帐户下载文件 我已经在我的项目中成功安装了 api 我正在关注本教程 https www dropbox com developers docume
  • 如何在 ASP.NET MVC RC 1.0 中使用动态母版页

    我不知道如何在 ASP NET MVC RC 1 0 中使用动态母版页 请帮忙 您可以在使用 View 辅助方法时指定母版页的名称 return View About AlternateMaster model AlternateMaste
  • 发布预编译的 ASP.net-MVC VS2010

    我找到了几个使用构建后事件的解决方案 有没有办法publishASP NET MVC 网站带有编译视图 以防止第一个用户查看延迟 但是不编译 them 在开发环境中 更快地编译网站 谢谢你 附 理想情况下 在 Visual Studio 2
  • ASP.NET MVC 5 基于用户角色自定义 Bootstrap 导航栏

    我正在使用 ASP NET MVC 5 内置身份验证方法 我想根据用户所处的角色显示和隐藏链接 在菜单导航栏中 有人达到这个目的了吗 从哪里开始 只需将您的链接包含在 if User IsInRole SomeRole
  • asp.net mvc 3 中模糊的远程属性验证

    asp net mvc 3 中的内置远程属性会执行 onchange 验证 我希望它在模糊时验证 有没有办法自定义它 或者还有其他东西可以这样做 我确信这是一个非常普遍的需求 你可以设置默认值 http docs jquery com Pl
  • MVC4 中的 ELMAH 和 API 控制器不记录错误

    在 MVC4 中使用 API 控制器 当控制器操作引发异常时 ELMAH 不会记录错误 我认为问题在于 MVC4 将 HTTP 状态代码设置为 500 并且它返回 JSON 对象中的异常详细信息 但它不会抛出未处理的异常 因此 ELMAH
  • 如何在 MVC4 Razor 中使用 CheckBoxList 和 DropdownList

    我必须使用 Html CheckBoxListFor 或 Html DropdownListFor 当我使用列表进行模型绑定时 我对如何在视图中使用这些帮助器类感到困惑 将列表绑定到 CheckBoxList 和 DropdownList
  • 实体框架获取前 10 行

    我在 SQL 数据库中有 3 个表 tbl视频 VideoID int PK Title varchar 100 Decription varchar 100 tblTags TagID int PK TagText varchar 100
  • 如何将模型包含在 RedirectToAction 中?

    In the RedirectToAction下面 我想通过一个viewmodel 如何将模型传递给重定向 我设置了一个断点来检查模型的值 以验证模型是否正确创建 这是正确的 但生成的视图不包含模型属性中找到的值 model created
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • MVC .NET 如何为现有源代码添加单元测试项目?

    我已经创建了 MVC 项目 VS2008 NET 3 5 第一次VS2008问我 您想为此应用程序创建单元测试项目吗 我选择否 现在我意识到它变得越来越复杂 TDD 测试驱动开发 方法会更好 但无法找到如何在我的解决方案中添加单元测试项目
  • MVC:业务逻辑放在哪里? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 首先 我看到了很多这方面的问题 但背后的推理还不够 如果我的问题不够好并且应该被删除 我会理解 我看过 例如 this https stacko
  • WCF Rest 服务还是 ASP.NET MVC 控制器/操作?

    如果有人能提供一些关于哪种更有益的见解 我将不胜感激 WCF 中的 RESTful 服务可以提供与 ASP Net MVC 控制器相同的功能 即可以使用控制器 操作适当地形成 URL 使用其中一种比另一种有真正的好处吗 WCF休息服务将提供
  • ASP.NET MVC:DataAnnotations - 显示一条错误消息,指示字段必须是数字

    DataAnnotations 的工作方式似乎存在一些漏洞 因为用户在将进入 int 的字段中输入一些文本将永远不会到达 DataAnnotations 代码 它会引发模型绑定错误并向用户显示错误 值 a 对于 XXXX 字段无效 不管怎样
  • 具有 MVC4 风格捆绑的 Intellisense

    到目前为止我找不到问题或解决这个问题 我确信我错过了一些简单的事情 我有一个带有一堆缩小的 CSS 的样式包 并且我正在用里面的类来装饰 HTML 元素 一切都运转良好 然而 Intellisense 和 ReSharper 都因为 CSS
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的

随机推荐

  • 尚不支持运算符重载?

    根据 Swift 编程指南 运算符重载是允许的 而且实际上非常通用 但是 我无法让它在操场上工作 例如 Equatable协议想要这样 func lhs Self rhs Self gt Bool 假设我做了一个简单的Location3D
  • VS Code:“isort 服务器在过去 3 分钟内崩溃了 5 次......”

    我可能弄乱了一些环境路径变量 我一边学习 Django 和虚拟环境 一边修改 VS Code 并更改了 Python 安装的目录路径 在弄清楚如何指向 VS Code 的默认 Python 路径时 我删除了一些用户路径变量 然后 伊索开始拒
  • 如何在 google colab 中运行 matlab .m 文件

    我目前正在尝试运行这个存储库https github com Fanziapril mvfnet https github com Fanziapril mvfnet这需要一个步骤 Run the Matlab ModelGeneratio
  • 已确认设计在最新版本中不起作用

    我最近从 Devise 1 2 升级到 1 4 9 除了我的可确认模块之外 一切似乎都正常 电子邮件以及整个过程都有效 但确认页面始终是空白的 它可以工作并确认电子邮件帐户 但不会重定向用户并引发 406 错误 对于错误确认尝试 它也会执行
  • iframe 不工作

    我正在尝试让 Iframe 正常工作 我正在运行 safari 所以它是兼容的 但是当我测试它时 它显示为空白 代码 p Your browser does not support iframes p 使用 尝试一下 编辑器后 我直接从 w
  • 您如何比较 IIS 和 Cassini 作为生产服务器?

    我有一个 ASP NET 网站 当前在 IIS 上运行 现在我想将该站点移至卡西尼号上运行 Cassini 与 IIS 相比有哪些优势 它的缺点是什么 您使用 Cassini 作为生产网络服务器的体验如何 据我所知 您不能在生产中使用 Ca
  • 比较给出错误输出的日期

    我正在创建一个函数来检查充满日期的数据库表中哪个日期小于当前日期 和过去一样 我有 3 个日期来测试该函数 以及它们背后的输出 上个月的日期 2015年4月28日 16 32 00日期尚未到来 11 06 2015 13 12 00上周日期
  • java并发:多生产者一消费者

    我遇到一种情况 不同的线程填充一个队列 生产者 并且一个消费者从该队列中检索元素 我的问题是 当从队列中检索这些元素之一时 某些元素会丢失 丢失信号 生产者代码是 class Producer implements Runnable pri
  • Perl 如何在空格上分割行,除非空格用双引号引起来?

    我有以下字符串 StartProgram 1 C Program Files ABC ABC XYZ CleanProgramTimeout 1 30 我需要一个正则表达式来分割这一行 但忽略 Perl 中双引号中的空格 以下是我尝试过的但
  • Time.advance 记录在哪里?

    在网上查了一下 我发现 RubyTime班级有Time advance 这是在哪里记录的 我在 Ruby API 文档中没有看到任何提及它here http apidock com ruby Time API 文档的搜索功能表明 任何地方都
  • 将进程附加到远程 PC 上正在运行的进程

    我正在开发一个 C 应用程序 该应用程序在远程 PC 上运行 我有 VPN 连接并使用 RDP 会话 我可以登录到该计算机 在那台计算机上 在正在运行的进程旁边 还有两个 msvsmon exe 进程 在任务管理器中具有以下 命令行 条目
  • 尝试让 libmecab.dll (MeCab) 与 C# 一起使用

    我正在尝试使用日本形态分析仪MeCab http mecab sourceforge net 在 C 程序 Visual Studio 2010 Express Windows 7 中 编码出现问题 如果我的输入 粘贴到文本框中 是这样的
  • Pymongo 如何正确使用 $push 更新现有文档

    我做错了什么或者我不明白 push 可能不明白 无论如何 我有以下文件 id ObjectId 501c83051d41c8753e000000 node denver enc environment production classes
  • RSpec - 模拟(或存根)重写 mixin 方法

    我有这样的情况 module Something def my method return some symbol end end class MyClass include Something def my method if xxx o
  • 从 LAN 中的其他计算机使用 ASP.NET Web Api 服务

    我用谷歌搜索了这个问题 但找不到任何可以解决我的问题的东西 我是 ASP NET Web Api 的新手 我构建了一个 ASP NET Web Api 当我在本地计算机上从 Visual Studio 运行它时 一切都运行良好 在这两种情况
  • 从redux中的reducer获取ID

    我是个新手 正在尝试使用 React 和 Redux 构建一个简单的书签应用程序 我无法解决这个问题 用户可以创建一个书签并将其添加到多个文件夹 所以我派了一个addMark bookmark 行动 然后addMark folder or
  • Pandas:添加具有最新值的列

    我有两个 pandas 数据框 两个数据框都带有日期时间条目的索引 这df1具有非唯一的时间索引 而df2有独特的 我想添加一栏df2 a to df1通过以下方式 对于中的每一行df1带时间戳ts df1 a应包含最新值df2 a其时间戳
  • 如何从 Laravel 5 中的 AJAX 调用返回视图?

    我正在尝试获取一个 html 表以在 ajax 调用中返回 route Route post job userjobs JobController userjobs ajax调用页面 function getUserJobs userid
  • Google 地图、PHP 和 MySQL 上的附近位置搜索

    我正在构建一个网络应用程序 只是为了好玩 xD 您可以在其中告诉它您在哪里以及您想去哪里 然后您可以搜索您可以乘坐的巴士列表 我的数据库是这样的 buses id bus number bus description routes id b
  • 客户端列表的 MVC 自定义验证

    我正在尝试编写一个在客户端工作的自定义验证器 用于验证所有复选框是否已被选中 这是模型的声明 DeclarationsAccepted ErrorMessage You must tick all declarations public I