zoukankan      html  css  js  c++  java
  • Asp.Net Core 入门(十)—— 模型绑定和验证

      模型绑定时将Http请求中的数据映射到控制器操作方法上对应的参数,操作方法中的参数可以是简单类型,如整形,字符串等,也可以是复杂类型,如Product,Order等。

      Asp.Net Core MVC的模型绑定和Asp.Net MVC模型绑定相似,模型绑定将按下图指定的顺序查找来自http请求中的数据绑定到控制器操作方法对应的参数上。

      同时,Asp.Net MVC Core绑定模型的时候同样也会进行模型的校验。那么,我们怎么给模型添加校验呢,其实也和Asp.Net MVC差不多。

      首先我们在模型的属性上添加验证属性,Display属性为显示在页面上的该字段的信息。

    /// <summary>
    /// 学生模型
    /// </summary>
    public class Student
    {
        public int Id { get; set; }
    
        [Display(Name="姓名")]
        [Required(ErrorMessage ="请输入名字")]
        public string Name { get; set; }
    
        [Display(Name = "班级")]
        [Required(ErrorMessage ="请输入班级")]
        public ClassNameEnum? ClassName { get; set; }
    
        [Display(Name = "邮箱地址")]
        [Required(ErrorMessage ="请输入邮箱地址")]
        public string Email { get; set; }
    }

    一般的属性校验有:

      Required      指定该字段是必填的

      Range       指定允许的最小值和最大值

      MinLength         指定字符串的最小长度

      MaxLength     指定字符串的最大长度

      Compare      比较模型的2个属性,例如比较Email和ComfirmEmail属性

      RegularExpression   正则表达式,验证提供的值是否与正则表达式指定的模式匹配

      其次,使用ModelState.IsValid属性验证属性是否绑定成功

    if (ModelState.IsValid)
    {
        Student newStudent = _studentRepository.Add(student);
    
        return RedirectToAction("Details", new { id = newStudent.Id });
    }
    else
    {
        return View(student);
    }

      最后,使用asp-validation-for和asp-validation-summary tag helper 来显示错误信息

    <div asp-validation-summary="All" class="text-danger"></div>
    
            <div class="form-group row">
                <label asp-for="Name" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    <input asp-for="Name" class="form-control" placeholder="请输入名字" />
                    <span asp-validation-for="Name" class="text-danger"></span>
                </div>
            </div>
    
    
            <div class="form-group row">
                <label asp-for="Email" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    <input asp-for="Email" class="form-control" placeholder="请输入邮箱" />
                    <span asp-validation-for="Email" class="text-danger"></span>
                </div>
            </div>
    
    
            <div class="form-group row">
                <label asp-for="ClassName" class="col-sm-2 col-form-label"></label>
                <div class="col-sm-10">
                    <select asp-for="ClassName" asp-items="Html.GetEnumSelectList<ClassNameEnum>()">
                        <option value="" selected></option>
                    </select>
                    <span asp-validation-for="ClassName" class="text-danger"></span>
                </div>
            </div>

      值得注意的是,在select标签的验证上,模型中有Required和无Required都会提示 The value '' is invalid.这是因为枚举ClassName里是int类型,而option里的value为“”,导致类型转化失败,我们可以在Student的ClassName设置为可空类型ClassNameEnum? 。

  • 相关阅读:
    day1
    day0
    Scala编程快速入门系列(二)
    Scala编程快速入门系列(一)
    awk使用方法与案例介绍
    快速掌握Shell编程
    yum源配置的三种方法
    部署Kettle做ETL开发并使用Crontab制作调度系统
    大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
    RDD概念、特性、缓存策略与容错
  • 原文地址:https://www.cnblogs.com/jesen1315/p/11067225.html
Copyright © 2011-2022 走看看