【问题标题】:Validation of complex classes in ASP.NET MVC4 failsASP.NET MVC4 中复杂类的验证失败
【发布时间】:2012-08-30 13:16:41
【问题描述】:

在使用 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; }
}

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

// 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 个字符,但 Model 需要 3 个字符。同样适用于 cust.DisplayName。但是当我验证一个纯客户类时,它会按预期失败。

知道有什么问题吗?

谢谢

吉日

【问题讨论】:

  • 据我所知,您无法验证这样的嵌套对象,也许可以使用自定义验证器
  • 默认情况下,数据注释验证似乎不会对嵌套对象进行验证。类似的帖子在这里stackoverflow.com/questions/2493800/…

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多