如何在具有多个属性的属性上停止模型验证传播

时间:2016-06-23 17:13:04

标签: c# asp.net-web-api data-annotations

我的web api中有以下模型

public class MyModel
{
    [Required(ErrorMessage = "Date is required")]
    [ValidDate(ErrorMessage = "Not a valid date format")]
    [ValidStartDate(ErrorMessage = "Not a valid start date")]
    public string startDate { get; set; }


    [Required(ErrorMessage = "Date is required")]
    [ValidDate(ErrorMessage = "Not a valid date format")]
    [IsDateAfterOrOnStartDate("startDate", ErrorMessage = "end date must be greater than or equal to start date")]
    public string endDate { get; set; }

}

我在自定义属性ValidDateAttribute,ValidStartDateAttribute和IsDateAfterOrOnStartdateAttribute中实现了一些自定义逻辑。但我想要的是,如果ValidDateAttribute(在两个属性上)给出错误或模型验证失败。我不希望框架在startDate属性上执行ValidStartDateAttribute,在endDate属性上执行IsDateAfterOrOnStartDateAttribute,换句话说,我希望模型验证能够自行停止它,而无需在这些属性上进一步传播和执行其他属性。

无论如何我能达到预期的效果吗?

1 个答案:

答案 0 :(得分:0)

不确定您是否能够完全按照自己的意愿行事,但从逻辑上讲,如果没有值或没有有效值,那些其他验证属性就没有意义。因此,在添加自己的验证错误之前,您可以非常轻松地让它们执行相同的检查。换句话说,如果没有值,则ValidDate只是不添加其错误,并且如果没有值或者该值不是有效日期,则IsDateAfterOrOnStartDate不添加其错误。最终结果将是你想要的。