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>
mvc之验证IEnumerable<T> 类型的更多相关文章
- mvc之验证IEnumerable<T> 类型,多选框验证
原文:mvc之验证IEnumerable<T> 类型,多选框验证 假设我们有这么一种需求,我们要同时添加年级和年级下面的多个班级,我们一般会像下面这种做法. Action中我们这样接收: ...
- MVC验证11-对复杂类型使用jQuery异步验证
原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- 通过扩展改善ASP.NET MVC的验证机制[实现篇]
原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持, ...
- 通过扩展改善ASP.NET MVC的验证机制[使用篇]
原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有 ...
- MVC之验证
MVC之验证 有时候我觉得,很多人将一个具体的技术细节写的那么复杂,我觉得没有必要,搞得很多人一头雾水的,你能教会别人用就成了,具体的细节可以去查MSDN什么的,套用爱因斯坦的名言:能在网上查到的就不 ...
- ASP.NET MVC - 模型验证
ASP.NET MVC - 模型验证(Model verification) 模型验证原理浅析 模型验证用到了模型绑定器.模型验证器(System.Web.Mvc.DataAnnotationsMod ...
- [转]ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
随机推荐
- dropdownlist 二级联动
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { GradeBind(); } } //绑定 ...
- (转)委托的N种写法,你喜欢哪种?
原文:http://www.cnblogs.com/FreeDong/archive/2013/07/31/3227638.html 一.委托调用方式 1. 最原始版本: delegate strin ...
- Android开发手记(10) 下拉菜单Spinner
1.自定义Spinner 首先,定义Spinner要显示的项目列表/res/values/arrays.xml <?xml version="1.0" encoding=&q ...
- asp.net 定时器
using System;using System.Collections.Generic;using System.Web;using System.IO;using System.Web.Secu ...
- 使用三层交换机的ACL实现不同vlan间的隔离
使用三层交换机的ACL实现不同vlan间的隔离 建立三个vlan vlan10 vlan20 vlan30 www.2cto.com PC1 PC3属于vlan10 PC2 PC4属于v ...
- c#geckofx文件流下载
备注:内容仅提供参考. ⒈添加引用:using Gecko; ⒉然后根据自己的情况在某个方法内添加事件: LauncherDialog.Download += new EventHandler< ...
- C#操作MYSQL遇到0000-00-00日期报错的原因
今天在做一个C#连接MYSQL数据库,并读取数据库的内容,遇到了0000-00-00日期转换报错:unable to convert MySQL date/time value to System.D ...
- C++拾遗(十二)C++代码重用
“has-a”关系 通常有两种方法实现: 1.被包含,本身是另一个类的对象. 2.私有或者保护继承. 主要讨论第二种方法,在继承时使用private关键字(或者不用任何关键字,默认就是私有的). 使用 ...
- 趣味PAT--循环-19. 币值转换(20)
One visible minute on the stage is attributed to ten years of invisible practice off the stage. &quo ...
- storm-kafka教程
一.原理介绍 本文内容参考:https://github.com/apache/storm/tree/master/external/storm-kafka#brokerhosts (一)使用st ...