Razor 页面 添加验证逻辑

1. 验证

   软件开发的一个关键原则被称为 DRY(即“不要自我重复”)。

    DRY 可以帮助:

      • 减少应用中的代码量。
      • 使代码更加不易出错,且更易于测试和维护

   Razor 页面鼓励进行仅指定一次功能的开发,且功能在整个应用中反映。

    Razor 页面和实体框架提供的验证支持是 DRY 原则的极佳示例:

      • 验证规则在模型类中的某处以声明方式指定。
      • 规则在应用的所有位置强制执行。

2. 将验证规则添加到电影模型

  命名空间 : System.ComponentModel.DataAnnotations提供以下内容 ; 

    • 一组内置验证特性,可通过声明方式应用于类或属性。
    • [DataType] 等格式特性,这些特性可帮助进行格式设置,但不提供任何验证。

  操作 : Models\Movie.cs 类 更新使用内置的[Required][StringLength][RegularExpression] 和 [Range] 验证特性。

    例 :

      [StringLength(60, MinimumLength = 3)]

         [Required]

      public string Title { get; set; } = string.Empty;

      [Required] 和 [MinimumLength] 特性指示属性必须具有一个值。 不阻止用户输入空格来满足此验证

      [StringLength] 特性可以设置字符串属性的最大长度,以及可选的最小长度。

          

      [RegularExpression(@"^[A-Z]+[a-zA-Z\s]*$")]

      [Required]

      [StringLength(30)]

      public string Genre { get; set; } = string.Empty;

      [RegularExpression(@"^[A-Z]+[a-zA-Z0-9""'\s-]*$")]

      [StringLength(5)]

      [Required]

      public string Rating { get; set; } = string.Empty;

      [RegularExpression] 特性用于限制可输入的字符。

        在上述代码中,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 枚举提供多种数据类型,如 DateTimePhoneNumberCurrencyEmailAddress 等。

        [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

posted @   大师兄被妖怪抓走了  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示