L-F*_*our 10 c# validation domain-driven-design data-annotations asp.net-mvc-3
我有,比方说,这个简单的课程:
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage="EmailIsRequired"]
public string EmailAddress { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我知道如何在System.ComponentModel.DataAnnotations命名空间中使用Validator.TryValidateProperty和Validator.TryValidateObject.为了使其工作,您需要要验证的对象的实际实例.
但是现在,我想要在没有User类实例的情况下验证某个值,例如:
TryValidateValue(typeof(User), "EmailAddress", "test@test.com");
Run Code Online (Sandbox Code Playgroud)
我的目标是在实际必须实例化对象本身之前测试一个值(原因是我只允许创建有效的域实体).所以实际上我想在类而不是实例上使用验证属性.
有什么想法可以做到吗?
谢谢!
编辑:同时我决定不使用数据注释,而是使用http://fluentvalidation.codeplex.com,以便验证移出实体之外.这样,可以从实体内部以及我的命令处理程序中触发验证.由于流利的符号,验证本身看起来更具可读性.
Dar*_*rov 18
以下是如何使用TryValidateValue方法的示例:
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage = "EmailIsRequired")]
public string EmailAddress { get; set; }
}
class Program
{
static void Main()
{
var value = "test@test.com";
var context = new ValidationContext(value, null, null);
var results = new List<ValidationResult>();
var attributes = typeof(User)
.GetProperty("EmailAddress")
.GetCustomAttributes(false)
.OfType<ValidationAttribute>()
.ToArray();
if (!Validator.TryValidateValue(value, context, results, attributes))
{
foreach (var result in results)
{
Console.WriteLine(result.ErrorMessage);
}
}
else
{
Console.WriteLine("{0} is valid", value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18475 次 |
| 最近记录: |