遍历ModelState中存储的错误信息
在服务器端验证中,有时我们添加了一个ModelError,然后还需要将该信息以JS的形式返回到客户端。如:
[HttpPost]
public ActionResult Index(LogOnModel model)
{
if (string.IsNullOrEmpty(model.UserName))
{
ModelState.AddModelError("UserName", "请输入用户名。");
return JavaScript("alert('请输入用户名')");
}
if (string.IsNullOrEmpty(model.PassWord))
{
ModelState.AddModelError("UserName", "请输入密码。");
return JavaScript("alert('请输入密码')");
}
if (string.IsNullOrEmpty(model.CheckCode))
{
ModelState.AddModelError("UserName", "请输入验证码。");
return JavaScript("alert('请输入验证码')");
}
if (ModelState.IsValid)
{
Response.Write("asdf");
}
return View();
}
这样重写一遍固然可以,但却做了重复的工作,如果我们能获取添加在ModelState中的错误信息,则可以省去不少的工作。
ModelState本身是一个字典,并且存储了验证失败的信息。具体被存储在ModelState.Values[i].Errors[j].ErrorMessage属性中。
ModelState的Errors属性存储了所有验证失败信息,是一个ModelErrorCollection类型,ModelErrorCollection是一个ModelError的集合,而ModelError的ErrorMessage属性包含了验证失败错误信息。
大致是这样:
○ ModelStateDictionary实际上是IDictionary<string, ModelState>类型
○ ModelState.Errors属性实际上是ModelErrorCollection类型
○ ModelErrorCollection实际上是ICollection<ModelError>类型
○ ModelError.ErrorMessage属性存储着所有验证失败信息
接下来的工作,其实就是如何把这个验证信息找出来。我们先手工添加一条验证信息,然后试图显示它:
ModelState.AddModelError("UserName", "请输入用户名。");
return JavaScript("alert('" + ModelState.Values.First().Errors[].ErrorMessage + "')");
上面的代码中,Values集合表示的为不同的键值,而Errors则表示同一键值下的不同信息。
ModelState.AddModelError("UserName", "请输入用户名。");
ModelState.AddModelError("UserName", "用户名不正确。");
ModelState.AddModelError("PassWord", "请输入密码。");
ModelState.AddModelError("PassWord", "密码不正确。");
//输出第一条
return Content(ModelState.Values.First().Errors[].ErrorMessage);
//输出第二条
return Content(ModelState.Values.First().Errors[].ErrorMessage);
//输出第三条
return Content(ModelState.Values.Skip().First().Errors[].ErrorMessage);
//输出第四条
return Content(ModelState.Values.Skip().First().Errors[].ErrorMessage);
清楚了这些,遍历一个ModelState也就不难了。
StringBuilder errinfo = new StringBuilder();
foreach (var s in ModelState.Values)
{
foreach (var p in s.Errors)
{
errinfo.AppendFormat("{0}\\n", p.ErrorMessage);
}
} return JavaScript("alert('" + errinfo.ToString() + "')");
以下分别是集中显示错误信息和依次显示错误信息的代码:
集中显示错误信息:
[HttpPost]
public ActionResult Index(LogOnModel model)
{
if (string.IsNullOrEmpty(model.UserName))
{
ModelState.AddModelError("UserName", "请输入用户名。");
}
if (string.IsNullOrEmpty(model.PassWord))
{
ModelState.AddModelError("PassWord", "请输入密码。");
}
if (string.IsNullOrEmpty(model.CheckCode))
{
ModelState.AddModelError("ChkCode", "请输入验证码。");
}
if (!ModelState.IsValid)
{
StringBuilder errinfo = new StringBuilder();
foreach (var s in ModelState.Values)
{
foreach (var p in s.Errors)
{
errinfo.AppendFormat("{0}\\n", p.ErrorMessage);
}
}
return JavaScript("alert('" + errinfo.ToString() + "')");
}
return View();
}
依次逐条显示错误信息:
[HttpPost]
public ActionResult Index(LogOnModel model)
{
if (string.IsNullOrEmpty(model.UserName))
{
ModelState.AddModelError("UserName", "请输入用户名。");
return JavaScript("alert('" + ModelState.Values.First().Errors[].ErrorMessage + "')");
}
if (string.IsNullOrEmpty(model.PassWord))
{
ModelState.AddModelError("UserName", "请输入密码。");
return JavaScript("alert('" + ModelState.Values.First().Errors[].ErrorMessage + "')");
}
if (string.IsNullOrEmpty(model.CheckCode))
{
ModelState.AddModelError("UserName", "请输入验证码。");
return JavaScript("alert('" + ModelState.Values.First().Errors[].ErrorMessage + "')");
}
if (ModelState.IsValid)
{ }
return View();
}
遍历ModelState中存储的错误信息的更多相关文章
- JAVA 在程序中存储和修改信息
1.语句和表达式 计算机程序是一组告诉计算机什么的指令,每一个指令称为语句. 2.指定变量类型 变量名.变量存储的信息类型 整型int(-2.14*109~2.14*109).浮点型float(38位 ...
- windows下cmd时复制dos中的内容 错误信息等
16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.
- ASP.Net MVC3/4中Model验证错误信息的本地化
最近使用ASP.Net MVC4做一个B/S的管理系统,里面有N多的Action和View Model,View Model上又有N多的验证. 一开始写的时候虽然知道要实现多语言,但是没有过多考虑,本 ...
- 使用selenium遍历frame中的表单信息 ;
遍历frame中的表单 : package webDriverPro; import java.util.List; import java.util.regex.Matcher; import ja ...
- 获取jwt(json web token)中存储的用户信息
一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...
- spring boot中实现security错误信息本地化
一.修改messages.properties 找源码中的messages.properties,复制一份放在classpath下,修改你要修改的内容 AbstractUserDetailsAuthe ...
- 统一处理jquery ajax请求过程中的异常错误信息的机制
当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编 ...
- allegro导入网表过程中出现的错误信息
1. 找不到焊盘PAD,下面这句话的意思是器件封装找不到焊盘46.pad WARNING(SPMHNI-): Unable to load symbol ): Could not find padst ...
- 在junit格式的结果信息中只包含错误信息的修改方法
文件名称:suiteJunit.vm 文件路径:src\fitnesse\resources\templates 添加如下黑体部分内容: <?xml version="1.0" ...
随机推荐
- HDU 2579 (记忆化BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:走迷宫.对于障碍点,只有当前(dep+1)%k才能走,问最少时间. 解题思路: 只有 ...
- 添加Bootstrap 到MVC项目中(vs2010)
环境:Visual Studio 2010 ASP.NET MVC3 手动添加: 下载地址:http://twitter.github.com/bootstrap/ 一个js,两个css,两张图 ...
- How to Programmatically Switch between the HubTile Visual States
In this post I am going to talk about how to programmatically switch between different HubTile Visua ...
- wp7 中 HubTile控件自定义大小。
http://blog.csdn.net/matrixcl/article/details/7057291 (转) Toolkit(http://silverlight.codeplex.com/)中 ...
- vim molokai配色方案(调过)
" Vim color file " " Author: Tomas Restrepo <tomas@winterdom.com> " " ...
- iOS-TextField知多少
iOS-TextField知多少 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRect ...
- [百科] - CreatePen()
CreatePen编辑[声明]HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor);[说明]用指定的样式.宽度和颜色创建一个画笔[参数 ...
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build198)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build198 编译日期:2014-09-17 ====================================== 二. ...
- node系列:琐碎备忘
cmd 全局与本地路径 查看:默认 查看本地路径:npm config get cache,默认和nodejs安装目录同一目录 查看全局路径:npm config get prefix,默认c盘app ...
- discuz怎么根据连接知道调用的是什么模板页面
其实不怎么难,基本都可以看出discuz是怎么样调用模板页面的 这个是论坛的帖子的列表页,看到url就可以看出是forum目录下的forumdisplay这个模板,forumdisplay.html这 ...