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 ...
随机推荐
- Springboot访问静态资源
转载 http://blog.csdn.net/catoop/article/details/50501706
- 认识JavaScript Promise
参考: EC前端 - Promise - http://www.ecmaer.com/javascript/nativeObj/promise.html 关于Promise: 什么是 Promise? ...
- 获取父窗口的xxx节点的方法
window.parent.document.getElementById("xxx");获取父窗口的xxx节点$("#myEle", window.paren ...
- java中如何使用break跳出多重循环
java 中已知的三种跳出多重循环的方式: System.out.println("---------java中跳出多重循环的三种方式:---------"); System.ou ...
- Apache Flink 简单安装
流计算这两年很火了,可能对数据的实时性要求高.现在用的hadoop框架,对流计算的支持,主要还是微批(spark),也不支持“Exactly Once”语义(可以使用外接的数据库解决),公司项目可能会 ...
- vue中v-model动态生成的实例详解
每一行有一个input和一个select,其中行数是根据服务器返回的json数据动态变化的.那么问题来了,我们要怎样动态生成v-model? <template> <div> ...
- (PMP)第4章-----项目整合管理
4.1 制定项目章程 输入 工具与技术 输出 1.商业文件 (商业论证,效益管理计划) 1.专家判断 1.项目章程 2.协议 2.数据收集 (头脑风暴,焦点小组,访谈) 2.假设日志 3.事业环境因素 ...
- shell脚本学习-分支结构
跟着RUNOOB网站的教程学习的笔记 if语法格式 if condition then command1 command2 ... commandN fi 写成一行(使用于终端命令提示符): ]; t ...
- Layui++>>ajax传递数组,防止深度序列化
- CentOS开启telnet服务
原文地址:https://blog.csdn.net/zhujiangm/article/details/4540778 服务器:CentOS-5.1(192.168.1.87)客户机:FC6(192 ...