码迷,mamicode.com
首页 > Web开发 > 详细

.net 4.5 webform 提取ModelState错误信息

时间:2018-01-06 20:02:09      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:前台   play   use   pre   return   字段名   错误   sdi   try   

.net4.5以后,webform也可以使用模型绑定和模型验证。

user实体:

public class User
    {
        [Required]
        [Display(Name = "用户ID")]
        public int Id { get; set; }
        [Required]
        [StringLength(20)]
        [Display(Name = "用户名")]
        public string UserName { get; set; }
        [Required]
        [StringLength(20)]
        [Display(Name = "用户密码")]
        public string PassWord { get; set; }
    }

 模型自动绑定和验证: 

var user = new Model.User();
var formValueProvider = new FormValueProvider(ModelBindingExecutionContext);
TryUpdateModel(user, formValueProvider);
//模型验证
if (ModelState.IsValid) { Response.Write(user.UserName); }

前台接收验证信息 

<asp:ValidationSummary runat="server" EnableViewState="True"/>

 

如果不用服务器控件,接受错误信息可以这么做

建立名为ModelStateErrorHandler的ModelState扩展方法

public static class ModelStateErrorHandler
    {
        /// <summary>
        /// ModelState扩展,取得Dictionary类型的错误信息
        /// </summary>
        /// <param name="errDictionary"></param>
        /// <returns>
        /// Key: 字段名
        /// Value: 字段错误信息
        /// </returns>
        public static Dictionary<string, string> GetModelErrors(this ModelStateDictionary errDictionary)
        {
            var errors = new Dictionary<string, string>();
            foreach (var pair in errDictionary.Where(k => k.Value.Errors.Count > 0))
            {
                var er = string.Join(",", pair.Value.Errors.Select(e => e.ErrorMessage));
                errors.Add(pair.Key, er);
            }
            return errors;
        }
        /// <summary>
        /// ModelState扩展,取得string类型的错误信息
        /// </summary>
        /// <param name="errDictionary"></param>
        /// <returns>
        /// 以|分割错误信息
        /// </returns>
        public static string GetModelErrorsString(this ModelStateDictionary errDictionary)
        {
            var errorsBuilder = new StringBuilder();
            var errors = errDictionary.GetModelErrors();
            foreach (var key in errors)
            {
                errorsBuilder.AppendFormat("{0}:{1}|", key.Key, key.Value);
            }
            return errorsBuilder.ToString();
        }
    }

调用:

var errorsDictionary = ModelState.GetModelErrors();
string jsonstr = new JavaScriptSerializer().Serialize(errorsDictionary);
var errorsString = ModelState.GetModelErrorsString();

在模板解析json或者字符串即可。

.net 4.5 以后很多mvc的特性webform也可以使用了。。爽啊

 

.net 4.5 webform 提取ModelState错误信息

标签:前台   play   use   pre   return   字段名   错误   sdi   try   

原文地址:https://www.cnblogs.com/wxb8/p/8215028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!