ModelState 错误信息输出
在MVC的项目中,我们通常情况下,为了方便(偷懒),会直接使用 !ModelState.IsValid 来判断实体的验证是否正确,但是这样对于用户的体验是不好的,当填写的内容比较多的时候,用户需要自己一个一个查找问题所在,然后修改。如何既能使用ModelState(偷懒),又能够让用户知道自己输入错误的信息在哪里呢? 基于这个情况,封装了两个类。
其中一个,主要是开发人员自己使用,比如说,你们的项目是前后端分离的,那么前端调用的时候,传递的数据格式不正确,或者少传了那些内容,你直接使用ModelState的时候,输出一个错误,前端会很崩溃的,尤其是在提交字段较多的情况下(可能会被挨打,,,),所以,为了安全起见,专门封装了内部人员使用的类,输出的是字段的名称,前端可以直接查找问题所在。
后一个,主要是输出错误信息给用户看的,注意在使用的过程中,你的实体类中字段名称,必须拥有DisplayName的特性!
好了,下面是代码:
第一个类
/// <summary>
/// 展示错误信息 调试使用
/// </summary>
public static class ModelStateExtensions
{
#region 调试使用
public static List<ShowModelStateError> GetStateErrors(this System.Web.Mvc.ModelStateDictionary modelState)
{
var result = new List<ShowModelStateError>();
//找到出错的字段以及出错信息
var errorFieldsAndMsgs = modelState.Where(m => m.Value.Errors.Any())
.Select(x => new { x.Key, x.Value.Errors });
foreach (var item in errorFieldsAndMsgs)
{
//获取键
var fieldKey = item.Key;
//获取键对应的错误信息
var fieldErrors = item.Errors
.Select(e => new ShowModelStateError(fieldKey, e.ErrorMessage));
result.AddRange(fieldErrors);
}
return result;
}
/// <summary>
/// 输出字符串类型的错误信息
/// </summary>
/// <param name="modelState"></param>
public static string GetStringStateErrors(this System.Web.Mvc.ModelStateDictionary modelState)
{
var errors = modelState.GetStateErrors();
return string.Join(";", errors.Select(n => $"{n.Key}:{n.Message};").ToList());
}
#endregion
}
第二个类
/// <summary>
/// 展示错误信息 用户查看
/// 注意:使用此方法需要配合实体的DisplayName使用!
/// </summary>
/// <typeparam name="T"></typeparam>
public static class ModelStateExtensionsForUser<T>
{
/// <summary>
/// 存储字段描述值 key为字段名,value为DisplayName
/// </summary>
private static Dictionary<string, string> _DisplayNameDic;
/// <summary>
/// 输出字符串类型的错误信息
/// </summary>
/// <param name="modelState">错误信息实体</param>
public static string GetErrors(System.Web.Mvc.ModelStateDictionary modelState)
{
if (_DisplayNameDic == null)
{
var properties = typeof(T).GetProperties();
foreach (var item in properties)
{
_DisplayNameDic.Add(item.Name, item.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName);
}
}
var errors = modelState.GetStateErrors();
var result = new List<string>();
if (errors != null)
{
foreach (var error in errors)
{
if (_DisplayNameDic.ContainsKey(error.Key) && !string.IsNullOrEmpty(_DisplayNameDic[error.Key]))
{
result.Add($"{_DisplayNameDic[error.Key]}:数据不正确");
}
else
{
result.Add($"{error.Key}:数据不正确");
}
}
}
return string.Join(";", result);
}
}
ModelState 错误信息输出的更多相关文章
- Linux bash 中,如何将正常信息和错误信息输出到文件
问题描述: $ command 2>> error $ command 1>> output 是否有方法,在bash同一行,实现输出stderr到error文件,输出stdou ...
- .net 4.5 webform 提取ModelState错误信息
.net4.5以后,webform也可以使用模型绑定和模型验证. user实体: public class User { [Required] [Display(Name = "用户ID&q ...
- java日志及异常错误信息输出的问题
1.异常信息可以层层传递,直到最后一层再输出日志也来得及 2.错误信息要在发生错误的当时就输出日志,否则到了其它层,很难得到准确的错误信息内容
- Abp中打开错误信息输出
Abp默认是不向客户端输出错误日志的,导致有些内部报错既不能中断,也没有信息输出.此时打开日志输出开关即可.在xxModule类中PreInitialize()方法里 Configuration.Mo ...
- IIS配置错误信息输出
Asp.net: 一.通过 IIS 配置 1.打开IIS管理器,或按住 WIN + R 打开命令行输入 inetmgr 打开 IIS 管理 2.左边目录选择目标站点,在右边 IIS 块中双击 “错误页 ...
- 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中
本文来自:http://blog.csdn.net/woshinia/article/details/18040063 很早以前 编译的时候 就在用 2>&1,但是一直没有生成一 ...
- 将Linux下编译的warning警告信息输出到文件中[整理笔记]
Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入 stdin = standar ...
- PHP中的错误信息
PHP中的错误信息 php.ini中配置错误消息 在PHP4中,没有异常 Exception这个概念,只有 错误Error.我们可以通过修改php.ini 文件来配置用户端输出的错误信息. 在ph ...
- 遍历ModelState中存储的错误信息
在服务器端验证中,有时我们添加了一个ModelError,然后还需要将该信息以JS的形式返回到客户端.如: [HttpPost] public ActionResult Index(LogOnMode ...
随机推荐
- 二、PyQt5基本功能和操作入门
在这里,我将根据自己的学习历程从初级到高级介绍pyqt5.因为是学到哪里就写道哪里,所以内容排版比较随意.有两点问题需要先说明: 1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以 ...
- mysql传统主从配置与主从监控
主从简介 在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患. 当数据规模非常大,读写量也很高时,一台数据库已经无法负担全部读写任务,就需要多台数据 ...
- Servers无法打开
有时候打开MyEclipse莫名Servers窗口挂掉, 出现"Could Not Create The View :An Unexpected Exception Was Thrown&q ...
- 图解HTTP第九章
基于 HTTP 的功能追加协议 1>HTTP 的瓶颈有哪些: 2>消除 HTTP 瓶颈的 SPDY,缩短 Web 页面的加载时间 [1]SPDY 的设计与功能 [2]SPDY 消除 Web ...
- pycharm汉化(3.6版本)
step 1:下载pycharm汉化包 链接:https://pan.baidu.com/s/1htgcbZY 密码:8uia step 2:将pycharm安装目录下的lib文件夹内下的resou ...
- 关于get和post请求的区别
1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...
- mysql字符集小结
http://blog.csdn.net/wyzxg/article/details/8779682 author:skatetime:2013/04/09 mysql字符集小结 今天同事阿杰兄发现内 ...
- Python Day 13 装饰器
阅读目录 内容回顾 函数嵌套的定义 global.nonlocal关键字 闭包及闭包的运用场景 开放封闭原则 装饰器 一个函数被多次装饰 ##内容回顾 1.函数对象:函数名 => 存放的是函 ...
- pip install cv2报错
pip install cv2 安装cv2报错: Could not find a version that satisfies the requirement cv2 (from versions: ...
- python模块:csv
""" csv.py - read/write/investigate CSV files """ import re from _csv ...