ASP.NET MVC轻教程 Step By Step 10——模型验证
在使用表单获取用户输入的数据时,我们必须对数据进行有效性验证,因为来自网络的信息都是不可信的。同时也要给用户即时的反馈,避免让用户感到困惑。这就涉及到数据验证的范畴。
数据验证最直接的做法是在服务器端对回传的数据加以甄别。在MessageBoard这个demo中,用户留言时昵称和留言内容都不能为空,并且留言内容不得少于15字。为此我们需要修改Write动作方法。
[HttpPost]
public ActionResult Write(Message message)
{
if (string.IsNullOrEmpty(message.NickName))
{
ModelState.AddModelError("NickName", "昵称不能为空");
}
if (string.IsNullOrEmpty(message.Content))
{
ModelState.AddModelError("Content", "内容不能为空");
}
else if(message.Content.Count() < )
{
ModelState.AddModelError("Content", "内容不能少于15字");
} if (ModelState.IsValid)
{
message.ReleaseDate = DateTime.Now;
messages.Add(message);
Response.Redirect("/Home/Index");
return View();
}
else
{
return View(message);
}
}
我们添加一组if语句来判断回传的数据,注意ModelState包含模型绑定的状态。通过ModelState.AddModelError添加错误信息以及ModelState.IsValid判断模型是否通过验证。
接下来要在Write视图显示验证错误提示,可以使用一些HTML辅助方法帮助我们完成。示例如下。
<body>
<h1>MVC留言板</h1>
@using (Html.BeginForm("Write", "Home"))
{
@Html.ValidationSummary()
@Html.LabelFor(m=>m.NickName,"昵称")
@Html.TextBoxFor(m => m.NickName)
<br /><br />
@Html.LabelFor(m => m.Content,"内容")
@Html.TextAreaFor(m => m.Content,5,50,null)
<br /><br />
<input type="submit" value="提交" />
}
</body>
Html.ValidationSummary可以显示模型验证的所用错误,如下图所示。

如果想在文本框之后显示错误信息,可以使用Html.ValidationMessageFor方法。
<body>
<h1>MVC留言板</h1>
@using (Html.BeginForm("Write", "Home"))
{
@Html.LabelFor(m=>m.NickName,"昵称")
@Html.TextBoxFor(m => m.NickName)
@Html.ValidationMessageFor(m=>m.NickName)
<br /><br />
@Html.LabelFor(m => m.Content,"内容")
@Html.TextAreaFor(m => m.Content,5,50,null)
@Html.ValidationMessageFor(m=>m.Content)
<br /><br />
<input type="submit" value="提交" />
}
</body>
效果如下。

Html.ValidationMessageFor方法在页面渲染时会生成一个<span>标签,如@Html.ValidationMessageFor(m=>m.NickName) 生成为<span class="field-validation-error" data-valmsg-replace="true" data-valmsg-for="NickName">昵称不能为空</span>,我们可以利用生成的span标签的class属性修改CSS样式,使页面更美观。
ASP.NET MVC轻教程 Step By Step 10——模型验证的更多相关文章
- ASP.NET MVC轻教程 Step By Step 1 ——入门
使用ASP.NET MVC有一段时间了,本人还是非常喜欢ASP.NET MVC这个框架模式的.在经历了WebForm复杂粗暴的做法后,自然感觉简洁优雅的MVC清新可人,只不过WebForm和MVC的设 ...
- ASP.NET MVC轻教程 Step By Step 8——路由
在前面的教程里,细心的你可能会有个疑问,就是地址栏输入/Home/Write就可以进入留言页面.无论是静态HTML还是ASP/ASP.NET.PHP,URL都是和某个页面相关.比如假设有个URL是“w ...
- ASP.NET MVC轻教程 Step By Step 13——页面布局
一般在一个网站中页面会使用相同的结构和元素,如果每个页面都要重复添加这些元素,不仅繁琐更会给我们后期维护带来大麻烦.所以我们采用网页模板之类的技术,将固定不变的元素放入模板,同时留下一些占位符供页面各 ...
- ASP.NET MVC轻教程 Step By Step 12——客户端验证
前面两节使用的两种数据验证方法都是在服务器端进行的,也就是提交了表单,数据回传给服务器才能验证.这样会带来两个问题,一是用户体验不好,用户提交了表单之后才知道存在问题:二是会给服务器带来额外的压力.我 ...
- ASP.NET MVC轻教程 Step By Step 9——分页
现在我们要把Index视图的留言信息进行分页显示. Step 1. 创建路由 我们希望以类似地址http://localhost:41583/Page1来表示第一页,Page2表示第二页,以此类推.在 ...
- ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法
在上一节我们使用强类型视图改进Write视图获得更好的智能感知和代码重构,现在可以进一步的改进动作方法. Step 1. 数据模型绑定 在Save方法中我们使用Request来获取表单传送的值,其实可 ...
- ASP.NET MVC轻教程 Step By Step 6——改进表单
上一节我们使用原始的HTML表单来完成留言功能,但是ASP.NET MVC提供了丰富的HTML辅助方法来帮助我们构建更简洁优雅的表单. Step 1. 修改Form标签 首先,我们可以使用Html.B ...
- ASP.NET MVC轻教程 Step By Step 2 ——View初探
在上一节我们完成了一个最简化的MVC程序,最重要的是下面这段代码. public class HomeController : Controller { public string Index() { ...
- ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller
ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Mess ...
随机推荐
- Hibernate查询之Criteria查询
转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式.Criteria ...
- HTML5的渐变色 渐变的两种类型 createLinearGradient 和createRadialGradient
今天又再看了html5的颜色渐变API,发现没有第一次看那么复杂. 不过我对这个颜色渐变存在着一个疑惑就是两种色带之间,那段是属于两种颜色混合的,有点模糊. 比如从红色变成黄色,在红与黄之间的那个地方 ...
- chrome下老是弹出网页显示 true
事实上这个问题是chrome下安装了一些插件的原因,一般来说是安装迅雷插件会出现这个问题,删除迅雷插件就好了.
- java 对象的this使用 java方法中参数传递特性 方法的递归
一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...
- android开发之merge结合include优化布局
merge结合include优化android布局,效果不知道,个人感觉使用上也有很大的局限,不过还是了解一下,记录下来. 布局文件都要有根节点,但android中的布局嵌套过多会造成性能问题,于是在 ...
- ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏
参考文献:ubuntu 13.04 安装 JDK 先去oracle官网下载jdk,这一段我就不赘述了. 下载好之后先解压,解压方式参见 linux常用的压缩与解压缩命令 ,解压之后,将文件剪贴至/us ...
- 第二篇:web之前端之css
前端之css 前端之css 本节内容 css概述及引入 css选择器 css常用属性 1.css概述及引入 CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式 ...
- Java代码操作HDFS(在/user/root/下面創建目錄)
1.创建HDFS目录并打成jar包 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...
- dumpbin.exe
有时候我们想查看一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口函数,这个时候可以使用dumpbin.exe工具: 1.输入Dumpbin -imports calldll.exe查看它 ...
- js 的执行过程
step 1. 读入第一个代码块. step 2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到step5. step 3. 对var变量和function定义做"预编译 ...