• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Asp.NetCore入门(十)——模型绑定和验证

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  模型绑定时将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? 。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap