Asp.Net Core 入門(十)—— 模型綁定和驗證

  模型綁定時將Http請求中的數據映射到控制器操做方法上對應的參數,操做方法中的參數能夠是簡單類型,如整形,字符串等,也能夠是複雜類型,如Product,Order等。正則表達式

  Asp.Net Core MVC的模型綁定和Asp.Net MVC模型綁定類似,模型綁定將按下圖指定的順序查找來自http請求中的數據綁定到控制器操做方法對應的參數上。ui

  同時,Asp.Net MVC Core綁定模型的時候一樣也會進行模型的校驗。那麼,咱們怎麼給模型添加校驗呢,其實也和Asp.Net MVC差很少。spa

  首先咱們在模型的屬性上添加驗證屬性,Display屬性爲顯示在頁面上的該字段的信息。code

/// <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; }
}

通常的屬性校驗有:orm

  Required      指定該字段是必填的blog

  Range       指定容許的最小值和最大值字符串

  MinLength         指定字符串的最小長度get

  MaxLength     指定字符串的最大長度input

  Compare      比較模型的2個屬性,例如比較Email和ComfirmEmail屬性string

  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? 。

相關文章
相關標籤/搜索