在ASP.NET MVC 4中谈到CheckBoxList,经常是与CheckBoxList的显示以及验证有关。我在"MVC扩展生成CheckBoxList并水平排列"中通过扩展HtmlHelper做到了水平或垂直显示CheckBoxList。在"MVC生成CheckBoxList并对其验证"中,借助模版实现对一组CheckBoxList的验证,但如果要对多组CheckBoxList验证,这种方法也不是很好。

比如,在电商商品模块中,关于某个类别下会有多个属性,有些属性值是单选,用DropDownList显示属性值;有些属性值是多选,用CheckBoxList显示属性值。

有如下2组CheckBoxList,我们要求每组至少选一项,否则报错:

如果不勾选任何选项点击"提交",2组CheckBoxList后面都报错:

如果勾选1组的任意选项,1组的报错消失,并把1组的选中项显示到下方(通常要把选中项提交给服务端),2组的报错依然存在:

如果再勾选2组的任意选项,2组的报错也消失,并把2组的选中项显示到下方:

如果不勾选1组的任何选项,1组勾选项的文字在正下方消失,1组又出现报错:

总之,本篇的实例做到了:
1、保证每组的CheckBoxList中至少有一项被选中
2、把勾选项显示出来

其实,以上的验证和显示,完全借助jQuery实现!

在Home/Index.cshtml中,当点击提交按钮或勾选/取消勾选CheckBoxList的选项,都执行相同的方法,那就是:遍历所有li中的所有CheckBox,只要每组被勾选的CheckBox数量为0就报错。

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}


<ul id="props" style="list-style-type: none">
    <li>
        组1:
        <input type="checkbox" name="1" value="土豆" />土豆
        &nbsp;
        <input type="checkbox" name="2" value="西红柿" />西红柿
        &nbsp;
        <input type="checkbox" name="3" value="西瓜" />西瓜
        &nbsp;
        <span class="err"></span>
    </li>
    <li>
        组2:
        <input type="checkbox" name="4" value="南瓜" />南瓜
        &nbsp;
        <input type="checkbox" name="5" value="冬瓜" />冬瓜
        &nbsp;
        <input type="checkbox" name="6" value="苦瓜" />苦瓜
        &nbsp;
        <span class="err"></span>
    </li>
</ul>
<input id="btnSubmit" type="submit" value="提交" />

<ul id="result">

</ul>


@section scripts
{
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            //点击提交按钮 每组checkboxlist组必须选择一项
            $('#btnSubmit').on("click", function () {
                checkCblist();
            });


            //勾选或取消勾选
            $('#props').on("change", "input[type=checkbox]", function () {
                checkCblist();

                //获取勾选值
                var temp = $(this).val();

                if ($(this).is(":checked")) {
                    $('<li/>', { html: temp }).appendTo('#result');
                } else {
                    $('#result li').filter(function () { return $.text([this]) === temp; }).remove();
                }
            });

            //检查每组CheckBoxList,如果没有一个选中,报错
            function checkCblist() {
                //遍历每组li下的checkboxlist,如果没有一个选中,报错
                $('#props li').each(function () {
                    if ($(this).find("input:checked").length == 0) {
                        $(this).find('.err').text("至少选择一项").css("color", "red");
                    } else {
                        $(this).find('.err').text("");
                    }
                });
            }

        });
    </script>
}


以上,
checkCblist方法遍历每一个li,如果每组CheckBoxList被勾选的CheckBox数量为0就显示错误信息。
○ 点击"提交按钮",触发checkCblist方法。
○ 勾选或取消勾选也触发checkCblist方法。而且如果勾选CheckBox,就在下方显示CheckBox的值,如果取消勾选CheckBox就删除正下方CheckBox的值。
filter方法接收返回类型为bool的匿名函数参数,过滤出符合条件的元素。

再议ASP.NET MVC中CheckBoxList的验证的更多相关文章

  1. ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)

    在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...

  2. asp.net mvc 中的自定义验证(Custom Validation Attribute)

    前言

  3. asp.net mvc中的后台验证

    asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...

  4. ASP.NET MVC中使用FluentValidation验证实体

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  5. ASP.NET MVC中使用FluentValidation验证实体(转载)

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  6. asp.net MVC 中 Session统一验证的方法

    验证登录状态的方法有:1  进程外Session   2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...

  7. ASP.NET MVC中商品模块小样

    在前面的几篇文章中,已经在控制台和界面实现了属性值的笛卡尔乘积,这是商品模块中的一个难点.本篇就来实现在ASP.NET MVC4下商品模块的一个小样.与本篇相关的文章包括: 1.ASP.NET MVC ...

  8. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...

  9. ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现

    在"ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现"中,在控制台应用程序中实现了属性值的笛卡尔乘积.本篇在界面中实现.需要实现的大致如下: 在界面 ...

随机推荐

  1. pop3设置

  2. idea如何导入一个maven项目

    1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...

  3. Java中类与类的关系

    在java中类和类的关系大致分三种:泛化.关联.依赖. 1. 泛化(Generalization) "XX是一个XX"关系(is a),通常使用的关键词为 extends.impl ...

  4. .NetCore 实现分页控件(URL分页)实战

    上一篇文章介绍了分页控件的具体实现方式,接下来我们就来做一个分页控件 后台数据处理就过度的介绍,下面针对URL分页中的下面几点做说明: 1.搜索条件的状态保持 2.点击分页需要带上搜索条件 3.页码的 ...

  5. net mvc webapi 实用

    asp.net mvc webapi 实用的接口加密方法   在很多项目中,因为webapi是对外开放的,这个时候,我们就要得考虑接口交换数据的安全性. 安全机制也比较多,如andriod与webap ...

  6. 【LOJ】#2115. 「HNOI2015」落忆枫音

    题解 如果不加这条边,那么答案是所有点入度的乘积 加上了这条边之后,我们转而统计不合法的方案数 就是相当于统计一条路径从y到x,新图所有点度的乘积除上这条路径所有点的点度乘积 初始化为\(f[y] = ...

  7. HNOI2018酱油记

    按照惯例,每次比赛完以后都要写酱油记. Day0: 明天就要省选了,今天同学们都回去了(因为后天要去春游),整个年级只剩下竞赛生.本来打算晚上好好复习一下,结果......颓了一晚上......(好吧 ...

  8. ES8之async/await学习随笔

    详细学习参考文档: 阮一峰老师的博客,覆盖知识点ES6/7/8/9,本篇学习笔记对阮老师的关于async/await文档中的知识点进行分点总结 在ES8中加入async/await新特性后,很明显带来 ...

  9. 命令:tr

    参考资料:https://www.thegeekstuff.com/2012/12/linux-tr-command/ 简介 tr命令用于转换.删除或者去除重复字符.它从STDIN中读取数据并且将其写 ...

  10. Java日志记录--log4j and logback

    问题的引入: 把所有的信息打印在控制台上不行吗? 01.控制台有行数限制: 02.System.out.println()影响系统性能: 03.如果我们需要对一些用户的行为习惯进行分析,我们找不到用户 ...