zoukankan      html  css  js  c++  java
  • ASP.NET Core MVC页面数据提交验证

    2019/05/14,ASP.NET Core 2.2.0

    摘要:ASP.NET Core MVC使用数据注释配合jquery.validate提交页面进行前端加后端的数据验证
    主要用到了jquery.validate(前端验证)、数据注解(后端模型验证)
     

    建立模型类User,使用数据注释

    using System.ComponentModel.DataAnnotations;
    
    namespace Demo.Models
    {
        public class User
        {
            [Key]
            public int Id { get; set; }
            [Display(Name = "登录账号")]
            [Required(ErrorMessage ="登录账号必填")]
            [StringLength(15, ErrorMessage = "字符长度不能超过15个字")]
            public string LoginId { get; set; }
            public string PassWord { get; set; }
            public string Name { get; set; }
            [Range(minimum:1,maximum:100,ErrorMessage ="请输入1到100的数字")]
            public int Age { get; set; }
        }
    }

    代码中部分数据注释的作用效果如上图所示,更多注释可以使用百度,例如远程验证、邮箱地址、正则表达式等

    前端form表单,使用TagHelpers

            <form asp-action="Create">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="LoginId" class="control-label"></label>
                    <input asp-for="LoginId" class="form-control" />
                    <span asp-validation-for="LoginId" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="PassWord" class="control-label"></label>
                    <input asp-for="PassWord" class="form-control" />
                    <span asp-validation-for="PassWord" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Name" class="control-label"></label>
                    <input asp-for="Name" class="form-control" />
                    <span asp-validation-for="Name" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Age" class="control-label"></label>
                    <input asp-for="Age" class="form-control" />
                    <span asp-validation-for="Age" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
            </form>

    注意点:

    1.aspnetcore用<form asp-action="Create">这种写法,自动防范了请求伪造(csxf攻击)

    2.<span asp-validation-for="PassWord" class="text-danger"></span>这种区块就是用于显示验证错误信息的地方,错误信息会自动加入到span标签中

    前端引入jquery.validate,注意使用之前要先引入jq

        <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
        <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>

    后台对应Create方法

            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<IActionResult> Create([Bind("Id,LoginId,PassWord,Name,Age")] User user)
            {
                if (string.IsNullOrWhiteSpace(user.Name))
                {
                    //名称需要填写,此处是为了演示AddModelError方法,实际Name必填应使用Required注释控制
                    //ModelState.AddModelError("", "名称需要填写");
                    ModelState.AddModelError(nameof(Models.User.Name), "名称需要填写");
                    return View(nameof(Create));
                }
    
                if (ModelState.IsValid)
                {
                    _context.Add(user);
                    await _context.SaveChangesAsync();
                    return RedirectToAction(nameof(Index));
                }
                return View(user);
            }

    使用ModelState.AddModelError(nameof(Models.User.Name), "名称需要填写");方法提示错误信息,会把错误信息给到对应span中

    AddModelError第一个参数,如果是空字符串,则会把错误信息给到<div asp-validation-summary="ModelOnly" class="text-danger"></div>中

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/kasnti/p/10865282.html
Copyright © 2011-2022 走看看