Razor 页面 添加验证逻辑
1. 验证
软件开发的一个关键原则被称为 DRY(即“不要自我重复”)。
DRY 可以帮助:
-
-
- 减少应用中的代码量。
- 使代码更加不易出错,且更易于测试和维护
-
Razor 页面鼓励进行仅指定一次功能的开发,且功能在整个应用中反映。
Razor 页面和实体框架提供的验证支持是 DRY 原则的极佳示例:
-
-
- 验证规则在模型类中的某处以声明方式指定。
- 规则在应用的所有位置强制执行。
-
2. 将验证规则添加到电影模型
命名空间 : System.ComponentModel.DataAnnotations提供以下内容 ;
- 一组内置验证特性,可通过声明方式应用于类或属性。
[DataType]等格式特性,这些特性可帮助进行格式设置,但不提供任何验证。
操作 : Models\Movie.cs 类 更新使用内置的[Required]、[StringLength]、[RegularExpression] 和 [Range] 验证特性。
例 :
[
[Required] 和 [MinimumLength] 特性指示属性必须具有一个值。 不阻止用户输入空格来满足此验证
[StringLength] 特性可以设置字符串属性的最大长度,以及可选的最小长度。
[
在上述代码中,Genre:
-
-
-
-
-
- 只能使用字母。
- 第一个字母必须为大写。 允许使用空格,但不允许使用数字和特殊字符。
-
-
-
-
Rating:
-
-
-
-
-
- 要求第一个字符为大写字母。
- 允许在后续空格中使用特殊字符和数字。 “PG-13”对“分级”有效,但对于“
Genre”无效。
-
-
-
-
让 ASP.NET Core 强制自动执行验证规则有助于:
-
-
-
- 提升应用的可靠性。
- 减少将无效数据保存到数据库的几率。
-
-
3. Razor 页面验证错误UI :
运行应用 - > Movie -> Creat New -> 使用无效值填写表单 -> 当 jQuery 客户端验证检测到错误时,会显示一条错误消息。
一项重要优势是 : 无需在“创建”或“编辑”页面中更改代码。 在模型应用数据注释后,即已启用验证 UI
4. 使用DataType特性
检查 Movie 类。
除了一组内置的验证特性,System.ComponentModel.DataAnnotations 命名空间还提供格式特性。
[DataType] 特性应用于 ReleaseDate 和 Price 属性。
例:
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
[DataType] 特性提供以下内容:
-
-
-
- 提供提示,供视图引擎设置数据的格式。
- 提供属性,例如 URL 的
<a>以及电子邮件的<a href="mailto:EmailAddress.com">。
-
-
使用 [RegularExpression] 特性验证数据的格式。
[DataType] 属性用于指定比数据库内部类型更具体的数据类型。
[DataType] 特性不是验证特性。 示例应用程序中仅显示日期,不显示时间。
DataType 枚举提供多种数据类型,如 Date、Time、PhoneNumber、Currency、EmailAddress 等。
[DataType] 特性:
-
-
-
- 可以使应用程序自动提供类型特定的功能。 例如,可为
DataType.EmailAddress创建mailto:链接。 - 可在支持 HTML5 的浏览器中提供
DataType.Date日期选择器。 - 发出 HTML 5
data-(读作 data dash)特性供 HTML 5 浏览器使用。 - 不提供任何验证。
- 可以使应用程序自动提供类型特定的功能。 例如,可为
-
-
DataType.Date 不指定显示日期的格式。 默认情况下,数据字段根据基于服务器的 CultureInfo 的默认格式进行显示。
要使 Entity Framework Core 能将 Price 正确地映射到数据库中的货币,则必须使用 [Column(TypeName = "decimal(18, 2)")] 数据注释
[DisplayFormat] 特性用于显式指定日期格式:
例 :
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
ApplyFormatInEditMode 设置用于指定在显示值进行编辑时将应用格式。
某些字段可能不需要此行为。 例如,在货币值中,可能不希望编辑 UI 中存在货币符号。
可单独使用 [DisplayFormat] 特性,但通常建议使用 [DataType] 特性。
[DataType] 特性按照数据在屏幕上的呈现方式传达数据的语义。
[DataType] 特性可提供 [DisplayFormat] 所不具有的以下优点:
-
-
- 浏览器可启用 HTML5 功能(例如显示日历控件、区域设置适用的货币符号、电子邮件链接等)。
- 默认情况下,浏览器将根据区域设置采用正确的格式呈现数据。
- 借助
[DataType]特性,ASP.NET Core 框架可选择适当的字段模板来呈现数据。 单独使用时,DisplayFormat特性将使用字符串模板。
-
5. 应用迁移
上述操作,会导致表架构的变更,虽然这些更改不会导致EF引发异常。不过,请创建迁移,使架构与模型保持一致。
工具=>NuGet 包管理器”>“包管理器控制台=>输入以下命令:
Add-Migration New_DataAnnotations
Update-Database

浙公网安备 33010602011771号