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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异