zoukankan      html  css  js  c++  java
  • .Net 使用特性方式验证参数

    重点:

    1、服务端主要引用 System.ComponentModel.DataAnnotations

    2、客户端主要引用 jquery.validate.min.js 和 jquery.validate.unobtrusive.min.js(当然jquery.js必须是前提)

    上代码

    /// <summary>
        /// 用户
        /// </summary>
        public class Member
        {
            [Required(ErrorMessage ="用户名不能为空")]
            [MaxLength(16,ErrorMessage ="用户名最多为16位")]
            [Display(Name ="用户名")]
            public string UserName { get; set; }
    
            [Required(ErrorMessage ="密码不能为空")]
            [MinLength(6,ErrorMessage ="密码最少为6位")]
            [MaxLength(32,ErrorMessage ="密码最多为32位")]
            [Display(Name ="密码")]
            public string Password { get; set; }
        }
    @{
        Layout = null;
    }
    @{
        ViewData["Title"] = "登录";
    }
    @model AttributeDemo.Models.Member
    <h1>Add</h1>
    
    @using (Html.BeginForm("Login", "Home", FormMethod.Post, new { @id = "ajaxPostForm", @class = "form-horizontal", enctype = "multipart/form-data" }))
    {
    
        @Html.TextBoxFor(a => a.UserName, new { @class = "input form-control" })
        @Html.ValidationMessageFor(a => a.UserName)
        @Html.TextBoxFor(a => a.Password, new { @class = "input form-control" })
        @Html.ValidationMessageFor(a => a.Password)
        <button id="btnSave">提交</button>
    }
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>总结:
    /// <summary>
            /// 登录
            /// </summary>
            /// <param name="member"></param>
            /// <returns></returns>
            [HttpPost]
            public IActionResult Login(Member member)
            {
                if (ModelState.IsValid)
                {
                    //登录逻辑
                    return Json("登录成功");
                }
                else 
                {
                    //模糊化错误信息提示
                    return Json("参数验证不通过");
                    //精确错误信息提示(返回第一遍历到的错误信息)
                    //foreach (var key in ModelState.Keys)
                    //{
                    //    var modelstate = ModelState[key];
                    //    if (modelstate.Errors.Any())
                    //    {
                    //        return Json(modelstate.Errors.FirstOrDefault().ErrorMessage);
                    //    }
                    //}
                }
            }

    优点:使用特性方式验证参数比传统逐条手写验证更优雅,前端和后端会进行双重校验,更便于扩展

    缺点:前端验证依赖Razor,如果使用vue等前端框架也需要单独再写参数验证

    总结:总体来说,优点是远远大于缺点的,是个好东西

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/13628743.html
Copyright © 2011-2022 走看看