zoukankan      html  css  js  c++  java
  • .net 4.5 webform 提取ModelState错误信息

    .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也可以使用了。。爽啊

  • 相关阅读:
    SRM146 DIV1 600
    SRM145 DIV1 1000
    SRM146 DIV1 300
    SRM145 DIV1 600
    【HTML打卡】0115 margin重叠、内联元素、css控制段落
    【HTML打卡】0114 盒模型margin、border、padding
    【HTML打卡】0113 div布局,css控制
    【HTML打卡】0112-html发展、doctype声明
    Machine Learning结课感想
    【ACM打卡】ZOJ 1045 2722 2830
  • 原文地址:https://www.cnblogs.com/wxb8/p/8215028.html
Copyright © 2011-2022 走看看