• 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="90px;" name="gradeName" />
        <input type="text" class="required" style="90px;" name="classNmae" />
        <input type="text" class="required" style="90px;" name="classNmae" />
        <input type="text" class="required" style="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="90px;" name="gradeName" />
        <input type="text" class="required" style="90px;" name="classNmae[0]" />
        <input type="text" class="required" style="90px;" name="classNmae[1]" />
        <input type="text" class="required" style="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="90px;" name="gradeName" />
        <input type="text" style="90px;" name="classNmae[0]" class="classname" />
        <input type="text" style="90px;" name="classNmae[1]" class="classname" />
        <input type="text" style="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="90px;" name="gradeName" />
            </div>
    
            <div class="editor-label">
                班级1
            </div>
            <div class="editor-field">
                <input type="text" style="90px;" name="classNmae[0]" class="classname" />
            </div>
            <div class="editor-label">
                班级2
            </div>
            <div class="editor-field">
                <input type="text" style="90px;" name="classNmae[1]" class="classname" />
            </div>
            <div class="editor-label">
                班级3
            </div>
            <div class="editor-field">
                <input type="text" style="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>





  • 相关阅读:
    Linux基本知识
    Linux 基金会发起开源创新计划,为全球对抗 COVID-19 提供基础架构
    单片机程序设计有十层功力,你现在在哪一层?
    C语言太复杂?CUDA Python也能实现并行计算加速!
    Java 基础 子类赋值给父类问题
    SpringBlade AVUE 拖拽排序
    java 基础 Long类型 判断是否相等
    数字量输入模块和模拟量输入模块的区别是什么?
    模拟量输入模块和模拟量输出模块的应用范围
    NB-IOT关键技术分析
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3301667.html
Copyright © 2020-2023  润新知