c# - ASP.NET MVC4 中复杂类的验证失败

标签 c# asp.net asp.net-mvc

在使用 DataAnnotation 验证 ASP.NET MVC4 中的复杂类时遇到了一个问题。

让我们有一个以下模型(简化)

public class Customer
{
   [Required]
   [StringLength(8, MinimumLength = 3)]        
   public string UserName { get; set; }

   [Required]
   [StringLength(8, MinimumLength = 3)]
   public string DisplayName { get; set; }
}


public class Order
{
    public Customer customer { get; set; }
}

然后我尝试在我的 Controller 中验证这个模型的一个实例:

// CREATE A DUMMY INSTANCE OF THE MODEL 
Customer cust = new Customer();
cust.UserName = "x";
cust.DisplayName = "x";

Order orderModel = new Order();
orderModel.customer = cust;

// VALIDATE MODEL
TryValidateModel(orderModel); // ModelState.IsValid is TRUE (which is incorrect)
TryValidateModel(cust); // ModelState.IsValid is FALSE (whic is correct}

orderModel 的验证应该会失败,因为 cust.UserName 只有 1 个字符,但模型需要 3 个字符。这同样适用于 cust.DisplayName。但是当我验证一个纯 Customer 类时,它会按预期失败。

知道哪里出了问题吗?

谢谢

智日

最佳答案

DataAnnotations 不会自行挖掘您的对象。您有两个选择:

1--编写自定义验证器检查子属性

2--创建一个 View 模型,其中填充了装饰有数据注释的简单属性

关于c# - ASP.NET MVC4 中复杂类的验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197763/

相关文章:

asp.net - 从 ASP.NET IIS 运行时,Powershell 启 Action 业、等待作业、主机线程永远不会退出

邮件正文的 HTML 到字符串

c# - 打破嵌套循环直到满足下一个条件

asp.net - 用户组的 session 超时不同

javascript - jQuery ajax 调用 mvc Action 不会触发成功/错误

asp.net-mvc - ASP.NET MVC 2.0 简单路由问题

c# - 如何通过互联网推送数据?

c# - C# : How can I pass a function name to another function to start a new thread? 中的多线程

c# - JsonConvert.DeserializeObject 函数在解析过时的枚举属性时抛出错误

来自具有特定值的文本文件的 C# 数组