验证 IList 属性数据注释

Posted

技术标签:

【中文标题】验证 IList 属性数据注释【英文标题】:validation on IList property dataannotations 【发布时间】:2011-08-08 03:00:59 【问题描述】:

我有类似订单表格的场景,其中一个订单可以有多个订单行。我在 asp.net mvc(主详细信息表单)的单个页面上实现这个我的视图模型看起来像

公开课秩序


   public int OrderIDget;set;
   public int CustomerIDget;set;
   public DateTime OrderDateget;set;
   public string ShippingAddressget;set;
   [ProductUnique(ErrorMessage = "Product must be unique in an order")]
   public IList<OrderLineItem> ProductLinesget;set;


public class OrderLineItem 

   public int OrderLineItemIDget;set;
   public int ProductIDget;set;
   public int Quantityget;set;

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

    是否有针对此问题的现成解决方案 如果我必须自己动手 验证属性我怎么能 把它挂在客户端应该在哪里 显示错误消息(与 属性或在验证摘要中)。 如果我可以附上它 非常棒的房产

目前我们正在使用 mvc2,但我们正计划升级,因此任何使用 mvc3 的答案都同样好。 谢谢

【问题讨论】:

【参考方案1】:

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

public class Order

    public int OrderIDget;set;
    public int CustomerIDget;set;
    public DateTime OrderDateget;set;
    public string ShippingAddressget;set;
    public IDictionary<int, int> ProductQuantitiesget;set;

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

【讨论】:

以上是关于验证 IList 属性数据注释的主要内容,如果未能解决你的问题,请参考以下文章

使用数据注释部分验证模型属性

使用数据注释和代码的自定义验证属性

哪个数据注释属性创建了这个验证属性?

csharp 自定义数据注释验证属性,用于验证数据是两个字符的美国州名缩写。

使用数据注释的依赖属性的自定义模型验证

如何使用数据注释为模型属性 WebApi .NET Core 添加布尔验证