asp绑定gridview属性_理解ASP.NET Core中的模型验证
當MVC執行模型綁定后,為了驗證綁定為參數提供的值是否符合預期,還需要進行模型驗證。
一、理解模型驗證
模型驗證是指模型綁定后對Action參數進行驗證的過程。它會根據事先定義的規則對參數的值進行驗證,驗證的結果可以通過ControllerBase類的ModelState屬性獲取,它的IsValid屬性用來說明是否通過驗證。
public IActionResult Create(Model model){ if (!ModelState.IsValid) { return View(); } // 通過驗證,繼續執行后續邏輯}二、數據注解與驗證
設置驗證規則最常見的方式是使用數據注解。數據注解包括一系列特性,這些特性均位于System.ComponentModel.DataAnnotations命名空間下。
public class User{ [Required] public int Id { get; set; } [Required, MinLength(2)] public string FirstName { get; set; } [Url] public string Website { get; set; }????[DataType(DataType.Password)] public string Password { get; set; }}上例中用到了一些數據注解特性,如[Required]、[MinLength]、[Url]、[DataType]等,其中[Required]特性要求相應的屬性值不能為空,必須提供;[MinLength]則可以指定屬性值的最小長度;[Url]特性指明該屬性的值必須是一個URL;[DataType]特性用于指明該屬性的數據類型。
廣告
Docker經典實例
作者:[美]戈阿岡(Sébastien,Goasguen)
京東
除了上面用到的特性外,數據注解還包含很多其他特性,在對用戶提交的數據進行驗證時,這些特性都非常有用。如果想要查看所有數據注解特性,可查看這里:https://docs.microsoft.com/dotnet/api/system.componentmodel.dataannotations。
在使用數據注解特性時,我們可以為它們指定ErrorMessage屬性,用于指明當該屬性值驗證失敗時要顯示的錯誤信息。
[Required(ErrorMessage = "用戶名不能為空")][MinLength(2,?ErrorMessage?=?"姓名不能少于2個字符")]當為模型定義了數據注解特性后,為了在Action中驗證參數是否符合規則,應首先檢查ModelState.IsValid屬性。
在視圖中,為了顯示錯誤消息,可以添加
或元素,并結合asp-validation-summary以及asp-validation-for標簽來分別顯示所有錯誤消息匯總以及針對某個屬性的錯誤消息。 ????三、自定義驗證規則
如果系統提供的驗證特性滿足不了我們的驗證需求,ASP.NET Core允許通過兩種方式來創建自定義驗證規則,一種是創建繼承自ValidationAttribute類的派生類,另一種是使用IValidatableObject接口。
舉例來說,如果我們希望Model中某個屬性的值必須以固定的字符串開始,則可以定義如下驗證特性:
- 上例中,StartWithAttribute類繼承自ValidationAttribute,并且重寫了基類的ValidationResult方法,通過返回ValidationResult對象來說明驗證是否成功。
提示:ValidationResult方法的ValidationContext參數表示驗證上下文,通過它的ObjectInstance屬性能夠獲取當前用于驗證的模型(或實體對象)。
接下來,只要像使用系統驗證特性一樣使用它就可以:
[StartWith(StartValue = "Abc")]另一種方式使用IValidatableObject接口,要使用這種方式,模型類需要實現這個接口。這個接口包含一個成員:
IEnumerableValidate(ValidationContext validationContext);具體例子如下:
public class MovieIValidatable : IValidatableObject{ private const int _classicYear = 1960; public int Id { get; set; } [Required] [StringLength(100)] public string Title { get; set; } [Required] public DateTime ReleaseDate { get; set; } [Required] [StringLength(1000)] public string Description { get; set; } [Range(0, 999.99)] public decimal Price { get; set; } [Required] public Genre Genre { get; set; } public bool Preorder { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (Genre == Genre.Classic && ReleaseDate.Year > _classicYear) { yield return new ValidationResult( $"Classic movies must have a release year earlier than {_classicYear}.", new[] { "ReleaseDate" }); } }}在Validate方法中,我們可以對所有需要自定義驗證的屬性進行判斷、驗證,并最終返回一個ValidationResult列表。
比較這兩種方法,前一種主要針對一個屬性進行驗證,而后一種則可以對多個屬性集中驗證;前一種方法不需要修改模型類的源碼(僅需要為屬性添加特性),后一種方法則需要修改模型類的源碼。具體要使用哪種方法,可根據實際情況而定。
總結
以上是生活随笔為你收集整理的asp绑定gridview属性_理解ASP.NET Core中的模型验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python集合加个逗号_8.Pytho
- 下一篇: java 反射模式_java 设计模式—