C# 集合中的模型验证-导致ModelState无效

C# 集合中的模型验证-导致ModelState无效,c#,asp.net-mvc,C#,Asp.net Mvc,MVC5应用程序 我有一个多领域的模型。。。其中两个是。。。(这是模型。) 我要做的是,除非eventDateStarted和eventDateCompleted字段不为null,否则决不允许将eventStatus设置为“Closed”。如果是,则会导致无效的ModelState 请注意:这里涉及到编程逻辑,它可以根据业务规则变得更高级。所以,这不仅仅是说这个字段是必需的,以便设置这个字段,等等 我在想,把这种逻辑放在eventStatus的set方法中是最好的。这是最佳实践解决方案吗?如果是

MVC5应用程序

我有一个多领域的模型。。。其中两个是。。。(这是模型。)

我要做的是,除非eventDateStarted和eventDateCompleted字段不为null,否则决不允许将eventStatus设置为“Closed”。如果是,则会导致无效的ModelState

请注意:这里涉及到编程逻辑,它可以根据业务规则变得更高级。所以,这不仅仅是说这个字段是必需的,以便设置这个字段,等等

我在想,把这种逻辑放在eventStatus的set方法中是最好的。这是最佳实践解决方案吗?如果是这样,如何强制ModelState无效

这是我到目前为止写的

    [Display(Name = "Status")]
    public string eventStatus
    {
        set
        {
            if (EventActualEnd is null || EventActualStart is null)
            {
                ModelState.AddModelError("Status", "Start and End date is mandatory");
            } 
        }
    }

但是,它不像AddModelError。

我不确定AuditStatusId的代码在哪里,但在我看来它似乎在一个模型中。ModelState是控制器的属性,只能从继承自System.Web.Mvc.controller的类访问

外部库对您来说是可行的选择吗?如果是这样的话,我会看看通过NuGet提供的MVC万无一失。它允许内置复杂的模型数据注释,这些注释将完全满足您的需要。您可以根据许多不同的情况设置自定义验证,并创建自己的验证


如果不可能的话,默认情况下,MVC在某种程度上受限于模型上的内置数据注释以进行验证。您必须使用自己的逻辑进行扩展,或者在通常检查服务器端ModelState.IsValid的控制器逻辑中,添加自己的逻辑来检查当前模型变量,然后继续或中断逻辑路径,基本上手动执行ModelState.IsValid。对于这样一个不是很复杂的检查,它应该是非常小的代码,如果需要在多个地方执行,您可以将其分解为一个实用程序类并传入模型,在那里执行验证,并为验证返回true或false。同样,这将仅限于服务器端,如果希望基于应用程序的构建方式进行客户端验证,则需要在客户端执行类似的操作。

创建条件验证属性的可能重复项。要获得好的指南,请参阅“谢谢”。是的,这是模型中的代码(set方法)。我在上面编辑了它。这是我自己的应用程序,所以我可以使用万无一失的高级注释。谢谢你的建议。
    [Display(Name = "Status")]
    public string eventStatus
    {
        set
        {
            if (EventActualEnd is null || EventActualStart is null)
            {
                ModelState.AddModelError("Status", "Start and End date is mandatory");
            } 
        }
    }