mvc之验证IEnumerable<T> 类型,多选框验证
原文: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("请至少选择一个班级。") }
}
});
});
mvc之验证IEnumerable<T> 类型,多选框验证的更多相关文章
- MVC验证11-对复杂类型使用jQuery异步验证
原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...
- MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件
类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...
- mvc之验证IEnumerable<T> 类型
假设我们有这么一种需求,我们要同时添加年级和年级下面的多个班级,我们一般会像下面这种做法. Action中我们这样接收: [HttpPost] public ActionResult CreateGr ...
- Spring MVC复选框
以下示例显示如何在使用Spring Web MVC框架的表单中使用复选框(Checkbox).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Framewo ...
- Syncfusion 复选框 ComboBoxAdv
XAML: <syncfusion:GridTemplateColumn.EditTemplate> <DataTemplate DataType="viewModel:C ...
- Asp.net MVC验证那些事(4)-- 自定义验证特性
在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...
- Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)
表单中的输入项,有些是固定的,不变的验证规则,比如字符长度,必填等.但有些是动态的,比如注册用户名是否存在这样的检查,这个需要访问服务器后台才能解决.这篇文章将会介绍MVC中如何使用[RemoteAt ...
- ASP.NET MVC – 关于Action返回结果类型的事儿(上)
原文:ASP.NET MVC – 关于Action返回结果类型的事儿(上) 本文转自:博客园-文超的技术博客 一. ASP.NET MVC 1.0 Result 几何? Action的 ...
- 不存在具有键“xxxId”的“IEnumerable<SelectListItem>”类型的 ViewData 项
项目中的某个页面,在访问时出现以下错误: 不存在具有键“xxxId”的“IEnumerable<SelectListItem>”类型的 ViewData 项 具体的场景说明如下: 一个编辑 ...
随机推荐
- cocos2d-x box2d Demo注解
勤奋努力,持之以恒. 核心概念 Box2D 中有一些主要的对象,这里我们先做一个简要的定义,在随后的文档里会有更具体的描写叙述. 刚体(rigid body) 一块十分坚硬的物质,它上面的不论什么两点 ...
- Lua 环境结构 --Linux
curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux ...
- Hibernate一个简短的引论
我们从几个方面进行阐述Hibernate When? What ? How? When? Hibernate由来是因为当时EJBBean1.1在处理entittBean架构时,花费的时间要比业务逻辑很 ...
- 马云收购UC你,至于到底是谁宣战
近日,阿里巴巴官方正式宣布,UC优视全资融入阿里巴巴集团,并组建阿里UC移动事业群. 据阿里方面表示,整个交易对UC的估值远超百度对91无线的估值,外界推測估值近50美元.是中国互联网最大一笔交易.业 ...
- ASP.NET跨平台
ASP.NET跨平台最佳实践 前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语 ...
- SqlServer 添加列并赋值
有个需求,需要给某张表添加一列并且赋值,分解需求,一共分两部走: 添加列 赋值 两个功能都不难,很快实现. --add column alter table Med_Summary_Template ...
- 数据同步DataX
数据同步那些事儿(优化过程分享) 简介 很久之前就想写这篇文章了,主要是介绍一下我做数据同步的过程中遇到的一些有意思的内容,和提升效率的过程. 当前在数据处理的过程中,数据同步如同血液一般充满全过 ...
- SICP 习题(1.1,1.2,1.3,1.4)解题总结。
近来在重读SICP,以前读过一次,读了第一二章就没有坚持下去,时间一长就基本忘记了,脑海里什么都不剩,就隐约记得自己曾经读过一本很牛B的书. 这次读希望能够扎实一点,不管能读到哪里,希望可以理解一些东 ...
- 观察者模式(observer行为)c#简单的例子
观察者模式(observer行为)c#简单的例子 几点:模式使观察目标和实现松耦合之间的依赖关系.通知会传播自己主动 样本:玩家击中后发生一系列变化的敌人:后发爆炸.敌人少1一个.... namesp ...
- zju2676 Network Wars 分数规划+网络流
题意:给定无向图,每条边有权值,求该图的一个割集,是的该割集的平均边权最小 Amber的<最小割模型在信息学竞赛中的应用>中讲的很清楚了. 二分答案k,对每条边进行重新赋值为原边权-k,求 ...