mvc之验证IEnumerable<T> 类型,多选框验证

简介: 原文: mvc之验证IEnumerable 类型,多选框验证 假设我们有这么一种需求,我们要同时添加年级和年级下面的多个班级,我们一般会像下面这种做法。 Action中我们这样接收: [HttpPost] public ActionResult C...
原文: mvc之验证IEnumerable<T> 类型,多选框验证

假设我们有这么一种需求,我们要同时添加年级和年级下面的多个班级,我们一般会像下面这种做法。

Action中我们这样接收:

[HttpPost]
public ActionResult CreateGrade(string gradeName, IEnumerable<string> classNames)
{

    return View();
}
View中我们一般会这样做:

@using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
{
    <p>
        若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
    </p>
    <input type="text" class="required" style="width:90px;" name="gradeName" />
    <input type="text" class="required" style="width:90px;" name="classNmae" />
    <input type="text" class="required" style="width:90px;" name="classNmae" />
    <input type="text" class="required" style="width:90px;" name="classNmae" />
    <button class="tn-button-primary" type="submit">
        <span class="tn-button-text">提交</span></button>
}
这种做法会有什么问题呢? 问题在于jquery.validate验证不支持验证多个相同的name,默认只验证第一个,所以只要第一个验证了,表单就可以提交了。我们要怎么改进呢?其实很简单,改一下班级的input的name就可以了。如下:
@using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
{
    <p>
        若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
    </p>
    <input type="text" class="required" style="width:90px;" name="gradeName" />
    <input type="text" class="required" style="width:90px;" name="classNmae[0]" />
    <input type="text" class="required" style="width:90px;" name="classNmae[1]" />
    <input type="text" class="required" style="width:90px;" name="classNmae[2]" />
    <button class="tn-button-primary " type="submit">
        <span class="tn-button-text">提交</span></button>
}
这样子就可以每一个都验证了,类似这样子验证的还有IEnumerable<Grade>,可以这样子写grade.Name[0],grade.Name[1]。但是这样子还是有问题,就是我们只能通过class样式来验证,如必填项class="required"。改成这样之后我们要怎么实现通过类似$("form").validate({options})来配置验证呢? 不用急下面来介绍怎么实现吧。
@using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
{
    <p>
        若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
    </p>
    <input type="text" style="width:90px;" name="gradeName" />
    <input type="text" style="width:90px;" name="classNmae[0]" class="classname" />
    <input type="text" style="width:90px;" name="classNmae[1]" class="classname" />
    <input type="text" style="width:90px;" name="classNmae[2]" class="classname" />
    <button class="tn-button-primary " type="submit">
        <span class="tn-button-text">提交</span></button>
}
<script type="text/javascript">
    $(function () {
        $("form").validate();//这句是必须的。
        $("input.classname").each(function () {
            $(this).rules("add", {
                required: true,
                number: true,
                messages: {
                    required: "不能为空",
                    number: "只能是数字"
                }
            });
        });
    })
</script>
这样子就是现实了。
来一个完整的:
@using (Html.BeginForm("index", "home", FormMethod.Post, new { id="createForm"}))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>创建年级</legend>
        <div class="editor-label">
            年级名称
        </div>
        <div class="editor-field">
            <input type="text" class="required" style="width:90px;" name="gradeName" />
        </div>

        <div class="editor-label">
            班级1
        </div>
        <div class="editor-field">
            <input type="text" style="width:90px;" name="classNmae[0]" class="classname" />
        </div>
        <div class="editor-label">
            班级2
        </div>
        <div class="editor-field">
            <input type="text" style="width:90px;" name="classNmae[1]" class="classname" />
        </div>
        <div class="editor-label">
            班级3
        </div>
        <div class="editor-field">
            <input type="text" style="width:90px;" name="classNmae[2]" class="classname" />
        </div>
        <p>
            <button class="tn-button-primary " type="submit">
                <span class="tn-button-text">提交</span></button>
        </p>
    </fieldset>
}

<script type="text/javascript">
    $(function () {
        $("#createForm").validate();//这句是必须的。
        $("input.classname").each(function () {
            $(this).rules("add", {
                required: true,
                number: true,
                messages: {
                    required: "不能为空",
                    number: "只能是数字"
                }
            });
        });
    })
</script>



多选框验证:

<div class="tnc-select-checkbox tn-helper-clearfix">
    @if (classes != null && classes.Count() > 0)
    {
        foreach (var item in classes)
        {
        <div class="tn-form-row">
            @Html.SipmleCheckBox("classIds", item.Id, htmlAttributes: new { @class = "tn-radiobutton", id = "classId_" + item.Id })
            <label for="@(string.Format("classId_{0}", item.Id))" title="@item.ClassFullName">
                @StringUtility.Trim(item.ClassFullName, 7)</label>
        </div>
        }
    }
</div>

$(function () {
        $("#editForm").validate();
        $("input[name='classIds']").rules("add", {
            required: true,
            messages: {
                required: function () { alert("请至少选择一个班级。") } 
            }
        });
    });



目录
相关文章
|
7月前
|
存储 前端开发 Java
Spring MVC 中的数据绑定和验证机制是什么,如何使用
Spring MVC 中的数据绑定和验证机制是什么,如何使用
|
前端开发 .NET 数据安全/隐私保护
菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部方法来判断跳转returnUrl //内部跳转 private IActionR...
2444 0
|
10月前
|
前端开发 Java Spring
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
152 0
|
10月前
|
前端开发 Java Spring
《Spring MVC》 第六章 MVC类型转换器、格式化器
《Spring MVC》 第六章 MVC类型转换器、格式化器
145 0
|
JSON 前端开发 Java
Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。
286 0
|
JSON 前端开发 Java
Spring MVC 实战:复杂类型接收表单字段
前言 这是 Spring MVC 处理器方法参数实战的第二篇,我们来尝试使用复杂的成员变量类型来接收 form 表单字段。 对于普通的 Java Web 项目,我们一般通过 ServletRequest#getParameter 方法来获取字符串类型的 form 表单字段值。
183 0
Spring MVC 实战:复杂类型接收表单字段
|
前端开发 JavaScript API
NET MVC第七章、jQuery插件验证
NET MVC第七章、jQuery插件验证
152 0
NET MVC第七章、jQuery插件验证
|
前端开发 数据库 计算机视觉
关于MVC中模型model的验证问题
关于MVC中模型model的验证问题
121 0
关于MVC中模型model的验证问题
|
前端开发 Java API
HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】(中)
HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】(中)
|
前端开发 Java UED
HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】(上)
HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】(上)
HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】(上)