繁体   English   中英

[必需]做什么?

[英]What does [Required] do?

我在网上没有发现[Required]的实际功能。 msdn-article根本不是探索性的。

static class Program
{
    public static Main()
    {
        var vustomer = new CustomerClass();
    }
}

public class CustomerClass
{
    public string m_FirstName;
    [Required]
    public string m_LastName;
}

据我了解,这应该引发异常,因为m_LastName是必需的,但未设置。 但是我没有。 我不知道这有什么好处,实际上没有做。

与所有其他属性一样, RequiredAttribute除了注释某些内容(在这种情况下,是类型的字段)之外,本身不会执行任何操作。 完全由使用该类型的应用程序来检测属性的存在并做出相应的响应。

您的示例程序不会执行此操作,因此该属性没有任何可见的效果。 诸如ASP.NET MVC和WPF之类的某些框架检查并响应该属性的存在。

Validator类使用此属性添加基于从ValidationAttribute继承的任何类型的验证错误。 例如,这可用于MVC模型验证

有关RequiredAttribute文档:

指定需要一个数据字段值。

但是,此验证通常仅在UI层中执行。 它不会“烘焙”到构造函数或其他低级用法中。 如果您想手动触发验证,则可以执行以下操作:

var customer = new CustomerClass();
var context = new ValidationContext(customer, serviceProvider: null, items: null);
var results = new List<ValidationResult>();

var isValid = Validator.TryValidateObject(customer, context, results);

if (!isValid)
{
    foreach (var validationResult in results)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}

为了增加当前的答案,以下是一些我可以想到的实际用途:

  • 实体框架使用它来将数据库建模为不可为空的字段。
  • Javascript客户端验证提供了JavaScript库,用于检查输入字段中是否有任何数据,否则阻止表单提交,从而避免不必要的服务器往返。
  • 服务器端验证(在执行模型绑定时)还会检查何时使用该装饰器发布模型,而该装饰器中传入的属性在请求中。 这确定是否应将模型状态设置为无效状态。 (1)
  • JSON.NET库也有注释,它可以更改模型的序列化/反序列化方式。 我非常有信心(但不确定),Json.net的“验证模式”在验证模式时确实考虑了“ Required”属性。
  • Web服务上使用了其他属性装饰器,但是在这种情况下,“必需”不是我所知道的。
  • Web api使用此属性将属性标记为文档帮助页面和模型绑定所要求的。
  • 您可以创建自己的应用程序逻辑,以了解“ Required”属性。 例如,在需要标记的视图上用*标记属性的视图。

这是一些用途,但您不仅限于此。

(1) 注意:例如,如果您的属性是一个int并用Required进行装饰,则模型状态永远不会处于无效状态。 对于此用例,应使用Nullable属性。

在C#中,属性几乎是对类和属性的修饰。

除了一些与安全性相关的属性外,大多数属性什么都不做。 它们被更高级别的框架用来做某事。

对于ASP.NET 4 MVC,仅当对象是请求的一部分时,该属性才用于生成错误。

如果要在任何其他环境中使用该属性,则必须编写代码进行检查。

它不会从普通的旧public static void Main()做任何事情

指定需要一个数据字段值。

http://msdn.microsoft.com/zh-CN/library/system.componentmodel.dataannotations.requiredattribute(v=vs.110).aspx

有几个属性可以控制如何应用此属性。

MSDN上有一篇文章讨论了如何使用验证属性来注释对象模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM