对IList属性数据注释的验证

时间:2011-04-18 18:52:17

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 data-annotations

我有订单表单的情况,其中一个订单可以有多个OrderLines。我在asp.net mvc(主要详细信息表单)的单页上实现这个我的视图模型看起来像

公共类订单

{
   public int OrderID{get;set;}
   public int CustomerID{get;set;}
   public DateTime OrderDate{get;set;}
   public string ShippingAddress{get;set;}
   [ProductUnique(ErrorMessage = "Product must be unique in an order")]
   public IList<OrderLineItem> ProductLines{get;set;}
}

public class OrderLineItem 
{
   public int OrderLineItemID{get;set;}
   public int ProductID{get;set;}
   public int Quantity{get;set;}
}

我希望ProductUnique属性强制执行一个产品只能在一个订单中出现一次我的问题

  1. 是否存在解决此问题的一些解决方案
  2. 如果我必须自己动手 验证属性我怎么样 挂在客户端应该在哪里 显示错误消息(带有 财产或验证摘要)。 如果我可以附上
    非常好的财产
  3. 目前我们正在使用mvc2,但我们正计划升级,所以mvc3的任何答案都同样好。
    感谢

1 个答案:

答案 0 :(得分:0)

这有点切,但我认为验证不是正确的方法。为什么不让你的模型看起来像这样:

public class Order
{
    public int OrderID{get;set;}
    public int CustomerID{get;set;}
    public DateTime OrderDate{get;set;}
    public string ShippingAddress{get;set;}
    public IDictionary<int, int> ProductQuantities{get;set;}
}

然后,如果您的用户将现有产品添加到订单,只需显示当前数量并提供增量选项。通过这种方式,您可以引导用户正确使用您的界面,而不是让他们犯错,然后用验证消息惩罚他们。