多个复选框的自定义数据注释

2024-01-13

好的,我有这些产品复选框,我想确保至少选择一种产品。

为此,我的 ViewModel 包含:

[DisplayName(@"Product Line")]
[MinChecked(1)]
public List<CheckboxInfo> ActiveProducts { get; set; }

该视图仅包含:

@Html.EditorFor(x => x.ActiveProducts)

该 EditorTemplate 包含:

@model Rad.Models.CheckboxInfo

@Html.HiddenFor(x => x.Value)
@Html.HiddenFor(x => x.Name)
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.Name)

自定义数据注释是:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class MinCheckedAttribute : ValidationAttribute, IClientValidatable
{
    public int MinValue { get; set; }

    public MinCheckedAttribute(int minValue)
    {
        MinValue = minValue;
        ErrorMessage = "At least " + MinValue + " {0} needs to be checked.";
    }

    public override string FormatErrorMessage(string propName)
    {
        return string.Format(ErrorMessage, propName);
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        try
        {
            List<CheckboxInfo> valueList = (List<CheckboxInfo>)value;
            foreach (var valueItem in valueList)
            {
                if (valueItem.Selected)
                {
                    return ValidationResult.Success;
                }
            }
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }
        catch (Exception x)
        {
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "minchecked",
        };

        rule.ValidationParameters["minvalue"] = MinValue;

        yield return rule;
    } 
}

jQuery 部分是:

$.validator.addMethod('minchecked', function (value, element, params) {
    var minValue = params['minvalue'];
    alert(minValue);
    $(element).each(function () {
        if ($(this).is(':checked')) {
            return true;
        }
    });
    return false;
});
$.validator.unobtrusive.adapters.add('minchecked', ['minvalue'], function (options) {
    options.messages['minchecked'] = options.message;
    options.rules['minchecked'] = options.params;
});

因此,验证在服务器端进行。

但是,如何才能让不引人注目的验证发挥作用呢?由于某种原因,

GetClientValidationRules没有将 HTML5 附加到复选框。


我有一个与上面非常相似的实现,这个客户端 jquery 代码确实可以为模型中的一组复选框工作(附加到 HTML5)。它将从数据注释中传输 ErrorMessage。

    [Display(Name = "Location1")]
    [CheckAtLeastOne(ErrorMessage = "Must check at least one Location")]
    public DateTime Location1 { get; set; }

    [Display(Name = "Location2")]
    public DateTime Location2 { get; set; }

    [Display(Name = "Location3")]
    public DateTime Location3 { get; set; }

    [Display(Name = "Location4")]
    public DateTime Location4 { get; set; }

    $(function () {
    $.validator.addMethod("checkatleastone", function (value, element) {
        var tag = $("#editform-locations").find(":checkbox");
        return tag.filter(':checked').length;
    });
});
$.validator.unobtrusive.adapters.addBool("checkatleastone");

但是,就我而言,我有另一个不属于模型一部分的复选框集合。它是一个单独的表,因此填充在 Viewbag 中,用于生成复选框列表。服务器端将无法工作,但客户端验证可以通过使用此 jquery 并将匹配的类名称添加到复选框的 html 中来工作。

    $(function () {
    $.validator.addMethod("CheckOneCategory", function (value, element) {
        var tag = $("#editform-categories").find(":checkbox");
        return tag.filter(':checked').length;
    }, "Select at least one Product/Service Category");
    $.validator.addClassRules("require-one-category", { CheckOneCategory: true });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个复选框的自定义数据注释 的相关文章

  • 在多个动态添加的表单上初始化 jQuery validate() 函数

    有人建议最好初始化一个 form validate 在页面加载而不是点击事件上运行 jquery form validate 插件仅允许在输入更改时提交 https stackoverflow com questions 10984196
  • Asp.Net MVC3 Razor - 子项目列表未从编辑器发回

    我正在尝试在 MVC3 中创建一个多级编辑器 我所说的多级是指我希望能够编辑三个层次结构级别的数据 父对象 父对象的子对象和子子对象的集合 我的模型大致如下 namespace MvcApplication1 Models public c
  • 如何取消 AjaxForm 上的提交

    我正在使用 jQuery 插件 ajax 形式 我尝试实现这样的东西 MyFormID ajaxForm dataType json resetForm true beforeSubmit function validateData ret
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • C# Checkedlistbox 如果选中

    是否可以像复选框一样将 Checked 应用于选中列表框 如果以复选框的方式执行此操作 则不起作用 if checkedListBox1 Items 2 Checked true 你需要的是方法GetItemCheckState 用法如下
  • 在画布上绘制多个矩形

    我试图在鼠标移动时在画布上添加多个矩形 但是当我在图像上绘制矩形时 画布上的背面图像也会被清除 我不想删除它 我想要画布上有多个矩形而不清除画布图像 请检查下面的 JavaScript 代码 var canvas document getE
  • jQuery.post 改变 HTML 中的一些特殊字符

    TinyMCE 中的示例数据 和 以上HTML代码 p 10003 and 9786 9999 9986 p 之前 工作正常 在保存的文档中获得相同的字符 function save and submit var tinyGenData t
  • 对一组复选框使用 HTML5“必需”属性?

    使用支持 HTML5 的较新浏览器 例如 FireFox 4 时 并且表单字段具有属性required required 并且表单字段为空 空白 然后点击提交按钮 浏览器检测到 必填 字段为空 并且不提交表单 相反 浏览器会显示一条提示 要
  • 当所选选项是下拉列表中已选择的选项时如何接收事件?

    动机 我想动态加载一个select使用来自 AJAX 调用的值 并允许用户select加载后列表中的第一项after它获得焦点 现在 第一项是selected项目 当您单击下拉列表并单击第一项时 什么也没有发生 我无法添加任何无效选择的占位
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • ASP.NET MVC:如何可靠地获取当前请求的真实URL?

    现在我有一个 MVC 应用程序运行在http 127 0 0 1 8081 http 127 0 0 1 8081 它实际上在 Azure 计算模拟器中运行 浏览器位置栏清楚地显示端口号为 8081 然而 Request Url and R
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • jQuery,REAL:不是等价的运算符?

    此代码行选择任何类名不是 id 和 quantity 的 div 内的所有子输入 div item gt div not id quantity gt input live keydown function event 执行相反操作的代码行
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r

随机推荐

  • True 返回 1

    false 效果很好 但是当我返回 true 时 我得到 true1 为什么 num 3 function number num for i 2 i lt num i if num i 0 echo false return false e
  • 在游戏编程中全局变量不好吗?

    我知道我对全局变量的本能反应是 糟糕 但在我在大学学习的两门游戏开发课程中 全局变量被广泛使用 现在在我使用的 DirectX 9 游戏编程教程 www directxtutorial com 中 我被告知全局变量在游戏编程中是可以的 该网
  • 使用 kotlin android 扩展在不同布局中引用具有相同 id 的视图

    在我的 Android 项目中 我有两个布局 num info 和 num info pack 两者都有 ID 为 circle 的视图 所以我认为通过layout name circle引用这些视图可以解决问题 val inetView
  • 如何对图像进行高质量缩放?

    我正在编写一些代码来在 C C 中缩放 32 位 RGBA 图像 我写了一些尝试 取得了一定的成功 但速度很慢 最重要的是 尺寸图像的质量不可接受 我将 OpenGL 即我的显卡 缩放的相同图像与我的例程进行了比较 结果发现它们的质量相差很
  • Laravel 5 Auth:这些凭据与我们的记录不匹配

    我刚刚开始使用 Laravel 5 我来自 Laravel 4 环境 所以应该不会太难 我听说 L5 带有一个内置的身份验证系统 非常简洁 我已经设置了从数据库到视图的所有内容 注册过程正常运行 之后它会自动登录 但是当我注销并尝试重新登录
  • paramiko.Proxycommand 无法设置套接字

    我正在尝试通过 SSH 连接到通过另一台计算机建立隧道的计算机paramiko http www lag net paramiko 在Python中 但我遇到了一些奇怪的问题 我的配置文件在 ssh config看起来像这样 Host re
  • 将 PartCover 2.3 与 .NET 4.0 运行时结合使用?

    我已经成功地将 PartCover 2 3 与 VS 2008 配合使用在我的 64 位机器上 https stackoverflow com questions 256287 how do i run partcover in x64 w
  • Java 中对单个字符串进行排序

    java中有没有一种本地方法可以按字符串的内容对字符串进行排序 例如 String s edcba gt abcde toCharArray其次是Arrays sort接下来是 String 构造函数调用 import java util
  • 使用 PHP 在 MySQL 中使用多维数组和聚合函数?

    UPDATED 如何在 u2 旁边再显示 1 列 称为 CUMULATIVE TOTAL它应显示学生总数 应付总额 已付总额和根据辅导员的应付总额 考虑我有 c1 c2 c3 c4 作为辅导员 u1 u2 作为大学 假设 c1 在每所大学有
  • 追加到元组并覆盖以前的值

    我正在使用 arcpy 来获取形状文件的所有折线 SearchCursor返回一个光标 以便我可以迭代形状文件的所有功能 问题是我想保存游标返回的所有对象以供以后使用 import arcpy from arcpy import env e
  • 当我可以使用等效代码时,为什么不应该在文件名中使用空格? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我读过很多关于不要在用于网络的文件名中使用空格的内容 例如网址 我不明白使用 有什么问题 20 在我的代码中引用名称时替换它们 使用此替换似乎更
  • 如何在 iOS swift 中将 .opus 文件转换为 .mp3/.m4a/.aac?

    我要玩 opus使用 AVAudioPlayer 文件 因为 AVAudioPlayer 不支持 opus文件 我正在尝试找到一种转换方法 opus到任何其他音频格式 以便我可以使用AVA音频播放器 有人能帮我解决这个问题吗 谢谢 你可以使
  • Sublime Text 3 在按 Enter 键后仅在 javascript 中的括号中缩进一个额外的制表符

    现在 我正在 Sublime Text 中使用 ReactJS 进行一个项目 每当我在括号之间按下回车键时 它就会中断到另一行并添加一个额外的空格 这是一个例子 初始启动 光标在中间 然后我按回车键 当前结果 然后它会添加这个额外的缩进 导
  • 将垂直滚动更改为水平滚动

    以前似乎有人问过这个问题 但没有得到足够的答案 我完全不知道如何做到这一点 包括没有插件 当我主动垂直向下滚动时 我希望我的网站能够水平滚动 我的意思的一些例子 http hotdot pro en http hotdot pro en a
  • 为什么工作管理器中的工作人员仍处于 ENQUEUED 状态?

    我正在使用 NetworkType CONNECTED 约束创建 OneTimeWorkRequest 但即使设备已连接到互联网 请求仍处于 ENQUEUED 状态 Constraints constraints new Constrain
  • Linux fork() 和 wait()

    我有一个难闻的问题 我有这个代码 int main pid t child parent int status 0 int i printf parent d n getpid for i 1 i lt 5 i if child fork
  • 一个头文件中有多个类与每个类有一个头文件

    无论出于何种原因 我们公司都有一个编码指南 其中规定 Each class shall have it s own header and implementation file 所以如果我们写一个类叫MyString我们需要一个关联的MyS
  • 标记提交以将它们分组到 Git 中

    有没有一种方法 常见做法可以在 Git 中标记和分组提交 据我了解 de facto例如 实践是引用以散列开头的问题编号和以 at 符号开头的人员 例如Fixed 23 or userName 并且像 BitBucket 或 Github
  • 匹配 Python 正则表达式搜索的第一个实例

    我正在寻找使用正则表达式匹配两个方括号的第一个实例 目前 我正在做 regex re compile lt r regex search line 适用于像这样的行 string returns string 但是当我在单独的行上尝试时 s
  • 多个复选框的自定义数据注释

    好的 我有这些产品复选框 我想确保至少选择一种产品 为此 我的 ViewModel 包含 DisplayName Product Line MinChecked 1 public List