[英]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);
}
}
为了增加当前的答案,以下是一些我可以想到的实际用途:
这是一些用途,但您不仅限于此。
(1) 注意:例如,如果您的属性是一个int并用Required进行装饰,则模型状态永远不会处于无效状态。 对于此用例,应使用Nullable属性。
在C#中,属性几乎是对类和属性的修饰。
除了一些与安全性相关的属性外,大多数属性什么都不做。 它们被更高级别的框架用来做某事。
对于ASP.NET 4 MVC,仅当对象是请求的一部分时,该属性才用于生成错误。
如果要在任何其他环境中使用该属性,则必须编写代码进行检查。
它不会从普通的旧public static void Main()
做任何事情
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.