【问题标题】:C# [Required()] annotation doesn't throw exception when it shouldC# [Required()] 注解不应该抛出异常
【发布时间】:2020-03-21 16:09:38
【问题描述】:

我在一个简单类的属性上方使用 [Required()]:

public class A
{
    [Required()]
    public string Str { get; set; }

    public int Salary { get; set; }
}

在 Main() 中,我创建了一个类的实例, 不设置属性:

static void Main(string[] args)
{
    A a = new A();
}

我希望得到一个异常,因为我没有设置任何值 到 Str 财产,但我没有得到任何东西。 我错过了[必填]的目的吗?

【问题讨论】:

    标签: c# .net annotations attributes data-annotations


    【解决方案1】:

    我错过了[必填]的目的吗?

    非常喜欢。让我们阅读the docs

    RequiredAttribute 属性指定当表单上的字段被验证时,该字段必须包含一个值

    所以我们专门讨论验证:它是 System.ComponentModel.DataAnnotations 命名空间内各种类的一部分,主要与验证有关。

    主要是看Validation 类,它可以让你根据你赋予对象的属性来验证对象的属性。此基础结构用于各种地方,例如在 ASP.NET 或 EF 中。

    【讨论】:

    • @s-itzik 这是您问题的答案。
    • 它们还用于让 Entity Framework 中的 Migrations 子系统知道如何在 EF CodeFirst 场景中根据模型对数据库表进行建模。
    • 好的,我明白我错过了目的 :-) 所以谢谢。它的工作方式是: var context = new ValidationContext(a, serviceProvider: null, items: null); var results = new List(); var isValid = Validator.TryValidateObject(a, context, results); if (!isValid) { foreach (var validationResult in results) { Console.WriteLine(validationResult.ErrorMessage); } } 我还不明白上下文问题,但你回答了我的问题。
    【解决方案2】:

    Required 属性用于验证(例如在 ASP.NET 中),而不是用于引发运行时异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多