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

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

Action中我们这样接收:

  1. [HttpPost]
  2. public ActionResult CreateGrade(string gradeName, IEnumerable<string> classNames)
  3. {
  4.  
  5. return View();
  6. }

View中我们一般会这样做:

  1. @using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
  2. {
  3. <p>
  4. 若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
  5. </p>
  6. <input type="text" class="required" style="width:90px;" name="gradeName" />
  7. <input type="text" class="required" style="width:90px;" name="classNmae" />
  8. <input type="text" class="required" style="width:90px;" name="classNmae" />
  9. <input type="text" class="required" style="width:90px;" name="classNmae" />
  10. <button class="tn-button-primary" type="submit">
  11. <span class="tn-button-text">提交</span></button>
  12. }

这种做法会有什么问题呢? 问题在于jquery.validate验证不支持验证多个相同的name,默认只验证第一个,所以只要第一个验证了,表单就可以提交了。我们要怎么改进呢?其实很简单,改一下班级的input的name就可以了。如下:

  1. @using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
  2. {
  3. <p>
  4. 若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
  5. </p>
  6. <input type="text" class="required" style="width:90px;" name="gradeName" />
  7. <input type="text" class="required" style="width:90px;" name="classNmae[0]" />
  8. <input type="text" class="required" style="width:90px;" name="classNmae[1]" />
  9. <input type="text" class="required" style="width:90px;" name="classNmae[2]" />
  10. <button class="tn-button-primary " type="submit">
  11. <span class="tn-button-text">提交</span></button>
  12. }

这样子就可以每一个都验证了,类似这样子验证的还有IEnumerable<Grade>,可以这样子写grade.Name[0],grade.Name[1]。但是这样子还是有问题,就是我们只能通过class样式来验证,如必填项class="required"。改成这样之后我们要怎么实现通过类似$("form").validate({options})来配置验证呢? 不用急下面来介绍怎么实现吧。

  1. @using (Ajax.BeginForm("index", "home", new AjaxOptions { OnBegin="onBegin", OnSuccess = "onSuccess" }))
  2. {
  3. <p>
  4. 若要了解有关 ASP.NET MVC 的更多信息,请访问 @Html.ActionLink("link me", "about", "home", new { plugin="dialog"})。
  5. </p>
  6. <input type="text" style="width:90px;" name="gradeName" />
  7. <input type="text" style="width:90px;" name="classNmae[0]" class="classname" />
  8. <input type="text" style="width:90px;" name="classNmae[1]" class="classname" />
  9. <input type="text" style="width:90px;" name="classNmae[2]" class="classname" />
  10. <button class="tn-button-primary " type="submit">
  11. <span class="tn-button-text">提交</span></button>
  12. }
  13. <script type="text/javascript">
  14. $(function () {
  15. $("form").validate();//这句是必须的。
  16. $("input.classname").each(function () {
  17. $(this).rules("add", {
  18. required: true,
  19. number: true,
  20. messages: {
  21. required: "不能为空",
  22. number: "只能是数字"
  23. }
  24. });
  25. });
  26. })
  27. </script>

这样子就是现实了。

来一个完整的:

  1. @using (Html.BeginForm("index", "home", FormMethod.Post, new { id="createForm"}))
  2. {
  3. @Html.ValidationSummary(true)
  4. <fieldset>
  5. <legend>创建年级</legend>
  6. <div class="editor-label">
  7. 年级名称
  8. </div>
  9. <div class="editor-field">
  10. <input type="text" class="required" style="width:90px;" name="gradeName" />
  11. </div>
  12.  
  13. <div class="editor-label">
  14. 班级1
  15. </div>
  16. <div class="editor-field">
  17. <input type="text" style="width:90px;" name="classNmae[0]" class="classname" />
  18. </div>
  19. <div class="editor-label">
  20. 班级2
  21. </div>
  22. <div class="editor-field">
  23. <input type="text" style="width:90px;" name="classNmae[1]" class="classname" />
  24. </div>
  25. <div class="editor-label">
  26. 班级3
  27. </div>
  28. <div class="editor-field">
  29. <input type="text" style="width:90px;" name="classNmae[2]" class="classname" />
  30. </div>
  31. <p>
  32. <button class="tn-button-primary " type="submit">
  33. <span class="tn-button-text">提交</span></button>
  34. </p>
  35. </fieldset>
  36. }
  37.  
  38. <script type="text/javascript">
  39. $(function () {
  40. $("#createForm").validate();//这句是必须的。
  41. $("input.classname").each(function () {
  42. $(this).rules("add", {
  43. required: true,
  44. number: true,
  45. messages: {
  46. required: "不能为空",
  47. number: "只能是数字"
  48. }
  49. });
  50. });
  51. })
  52. </script>

多选框验证:

  1. <div class="tnc-select-checkbox tn-helper-clearfix">
  2. @if (classes != null && classes.Count() > 0)
  3. {
  4. foreach (var item in classes)
  5. {
  6. <div class="tn-form-row">
  7. @Html.SipmleCheckBox("classIds", item.Id, htmlAttributes: new { @class = "tn-radiobutton", id = "classId_" + item.Id })
  8. <label for="@(string.Format("classId_{0}", item.Id))" title="@item.ClassFullName">
  9. @StringUtility.Trim(item.ClassFullName, 7)</label>
  10. </div>
  11. }
  12. }
  13. </div>
  1. $(function () {
  2. $("#editForm").validate();
  3. $("input[name='classIds']").rules("add", {
  4. required: true,
  5. messages: {
  6. required: function () { alert("请至少选择一个班级。") }
  7. }
  8. });
  9. });

mvc之验证IEnumerable<T> 类型,多选框验证的更多相关文章

  1. MVC验证11-对复杂类型使用jQuery异步验证

    原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...

  2. MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件

    类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...

  3. mvc之验证IEnumerable<T> 类型

    假设我们有这么一种需求,我们要同时添加年级和年级下面的多个班级,我们一般会像下面这种做法. Action中我们这样接收: [HttpPost] public ActionResult CreateGr ...

  4. Spring MVC复选框

    以下示例显示如何在使用Spring Web MVC框架的表单中使用复选框(Checkbox).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Framewo ...

  5. Syncfusion 复选框 ComboBoxAdv

    XAML: <syncfusion:GridTemplateColumn.EditTemplate> <DataTemplate DataType="viewModel:C ...

  6. Asp.net MVC验证那些事(4)-- 自定义验证特性

    在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...

  7. Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)

    表单中的输入项,有些是固定的,不变的验证规则,比如字符长度,必填等.但有些是动态的,比如注册用户名是否存在这样的检查,这个需要访问服务器后台才能解决.这篇文章将会介绍MVC中如何使用[RemoteAt ...

  8. ASP.NET MVC – 关于Action返回结果类型的事儿(上)

    原文:ASP.NET MVC – 关于Action返回结果类型的事儿(上) 本文转自:博客园-文超的技术博客 一.         ASP.NET MVC 1.0 Result 几何? Action的 ...

  9. 不存在具有键“xxxId”的“IEnumerable<SelectListItem>”类型的 ViewData 项

    项目中的某个页面,在访问时出现以下错误: 不存在具有键“xxxId”的“IEnumerable<SelectListItem>”类型的 ViewData 项 具体的场景说明如下: 一个编辑 ...

随机推荐

  1. MemoryBarrier,Volatile

    使用MemoryBarrier,Volatile进行同步 上一节介绍了使用信号量进行同步,本节主要介绍一些非阻塞同步的方法.本节主要介绍MemoryBarrier,volatile,Interlock ...

  2. 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

    // 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba ...

  3. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

    一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...

  4. UVa 11205 - The broken pedometer

    称号:给你p一个LED在同一个显示器组成n一个.显示每个显示器上的符号(LED的p长度01串) 问:用最少p几个比特位,您将能够这些区分n不同的符号.同样不能(其他位置上设置0处理) 分析:搜索.枚举 ...

  5. android变化HOLO对话风格

    andriod风修改对话框格,通过设置theme实现.一些要素需要通过Java代码更改,下面的对话框更改的步骤的例子称号. 1.写文本样式. DIALOG标题是textview,在sytles.xml ...

  6. extjs每一个组件要设置唯一的ID

    extjs每一个组件要设置唯一的ID,否则会造成各种错误 EXTJS基本上是靠ID来识别组件的,假如你在panel1中有个ID:"keyword"的textfield,而panel ...

  7. Java它配备了一个很好的工具2

    Jconsole 本机java自带的系统monitor具,它也可以连接到的本地远程连接java process,联系java process申请后可查看CPU,内存,主题.GC事件,能帮忙看看系统是否 ...

  8. NSIS:安装、卸载时检查程序是否正在运行

    原文 NSIS:安装.卸载时检查程序是否正在运行 如果我们要安装或升级的程序正在运行,文件肯定会替换不成功,以下代码可以提示用户结束正在运行的程序. 需要使用插件FindProcDLL.dll,下载路 ...

  9. CSDN博客ByeBye

    情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...

  10. Ubuntu升级后apache所有的失败,以解决虚拟文件夹的设置

    问题描述: 将Ubuntu离12.04升级到14.04后,出现apache配置的虚拟文件夹所有失效.所有站点域名所有定向到根文件夹.无法分别訪问! 尝试方法: 開始以为是升级后Apache的问题.已经 ...