在服务器端验证中,有时我们添加了一个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中存储的错误信息的更多相关文章

  1. JAVA 在程序中存储和修改信息

    1.语句和表达式 计算机程序是一组告诉计算机什么的指令,每一个指令称为语句. 2.指定变量类型 变量名.变量存储的信息类型 整型int(-2.14*109~2.14*109).浮点型float(38位 ...

  2. windows下cmd时复制dos中的内容 错误信息等

    16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.

  3. ASP.Net MVC3/4中Model验证错误信息的本地化

    最近使用ASP.Net MVC4做一个B/S的管理系统,里面有N多的Action和View Model,View Model上又有N多的验证. 一开始写的时候虽然知道要实现多语言,但是没有过多考虑,本 ...

  4. 使用selenium遍历frame中的表单信息 ;

    遍历frame中的表单 : package webDriverPro; import java.util.List; import java.util.regex.Matcher; import ja ...

  5. 获取jwt(json web token)中存储的用户信息

    一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...

  6. spring boot中实现security错误信息本地化

    一.修改messages.properties 找源码中的messages.properties,复制一份放在classpath下,修改你要修改的内容 AbstractUserDetailsAuthe ...

  7. 统一处理jquery ajax请求过程中的异常错误信息的机制

    当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编 ...

  8. allegro导入网表过程中出现的错误信息

    1. 找不到焊盘PAD,下面这句话的意思是器件封装找不到焊盘46.pad WARNING(SPMHNI-): Unable to load symbol ): Could not find padst ...

  9. 在junit格式的结果信息中只包含错误信息的修改方法

    文件名称:suiteJunit.vm 文件路径:src\fitnesse\resources\templates 添加如下黑体部分内容: <?xml version="1.0" ...

随机推荐

  1. 使用X-UA-Compatible来设置IE8/IE9兼容模式

    文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...

  2. const放在函数前和放在函数后

    template < class T, class container = vector<T> > class MyClass{ private: T value; publi ...

  3. Java中替换HTML标签的方法代码

    这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...

  4. 参考XML操作类

    转载参考地址: http://blog.csdn.net/happy09li/article/details/7460521

  5. SSh结合Easyui实现Datagrid的分页显示

    近日学习Easyui,发现非常好用,界面很美观.将学习的心得在此写下,这篇博客写SSh结合Easyui实现Datagrid的分页显示,其他的例如添加.修改.删除.批量删除等功能将在后面的博客一一写来. ...

  6. QDir, QFileInfo 和 QDirIterator 区别

    这三个类相互有关联,但是有不尽相同,首先从名字上看,QDir 和 QDirIterator 是针对于文件目录的,也就是文件夹,我们知道,对于一个文件夹,可以包含很多文件,也可以包含其他文件夹,通常是一 ...

  7. uva10098 Generating Fast, Sorted Permutation

    #include"iostream"#include"stdio.h"#include"string.h"#include"alg ...

  8. 使用javabean连接数据库时遇到的问题

    1.whitespace问题.是便签了每空格如: 就会出现下面的问题.contentType前每空格.空格后就解决了 2. 这是部署问题,关闭,重新部署 追问 怎么部署? 回答 1.选中项目 F5(e ...

  9. css margin居中的问题

    1.要在外壳套上一个父div加上100%宽度,在子div加上宽度和margin:auto; 2.子div的宽度通常是子div中元素的宽度,比如子div中一个宽度为169px的input.想居中的话,就 ...

  10. HP StorageWorks MSL2024 Tape Libraries - Tape library Error Codes

    Main error codes Error Code Description Details and Solution 80 Can not initialize bar code reader P ...