C# MVC4中两个变量的RequiredIf条件验证

C# MVC4中两个变量的RequiredIf条件验证,c#,asp.net-mvc-4,model,required-field,foolproof-validation,C#,Asp.net Mvc 4,Model,Required Field,Foolproof Validation,我有一个下面的模型类 public bool Saturday{ get; set; } public bool Sunday{ get; set; } public string Holiday{ get; set; } [RequiredIf("Sunday,Saturday",false)] public string Holiday{ get; set; } 在其中,我希望对假日字段使用RequiredIf条件,同时使用Saturday和Sunday字段。我可以

我有一个下面的模型类

 public bool Saturday{ get; set; }

 public bool Sunday{ get; set; }

 public string Holiday{ get; set; }
   [RequiredIf("Sunday,Saturday",false)]
   public string Holiday{ get; set; }
在其中,我希望对假日字段使用RequiredIf条件,同时使用Saturday和Sunday字段。我可以用下面的方法吗

 public bool Saturday{ get; set; }

 public bool Sunday{ get; set; }

 public string Holiday{ get; set; }
   [RequiredIf("Sunday,Saturday",false)]
   public string Holiday{ get; set; }

所以我不知道如何在我的模型类中使用RequiredIf条件,所以请有人帮助我

我的项目中有RequiredIf

[Required]
public int SalesID { get; set; }

[RequiredIf("SalesID==1", ErrorMessage = "License is required.")]
public string License{ get; set; }
仅当SalesID为1时,许可证为空时,才会显示错误消息“License is required.”。如果SalesID为1,则许可证不能为空

对于您的代码,它应该是

[RequiredIf("Sunday,Saturday",AllowEmptyStrings=false)]
public string Holiday{ get; set; }

这意味着如果周日和周六为真,您可以允许假日属性为空字符串。

也许可以在您的模型中尝试以下操作:

[Required]
public bool Saturday{ get; set; }

[Required]
public bool Sunday{ get; set; }

[NotMapped]
public bool SatSun
{
    get
    {
        return (!this.Saturday && !this.Sunday);
    }
}

[RequiredIf("SatSun",true)]
public string Holiday{ get; set; }

如果需要更复杂的验证,我建议实现IValidatableObject

public class YourModel : IValidatableObject
{
    public bool Saturday{ get; set; }

    public bool Sunday{ get; set; }

    public string Holiday{ get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var result = new List<ValidationResult>();

        if (Saturday == false && Sunday == false && string.IsNullOrEmpty(Holiday))
        {
            result.Add(new ValidationResult("Holiday is required outside weekends"));
        }

        return result;
    }
}

public类YourModel:IValidatableObject
{
公共学校星期六{get;set;}
公共布尔星期日{get;set;}
公共字符串Holiday{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
var result=新列表();
如果(星期六==false&&Sunday==false&&string.IsNullOrEmpty(假日))
{
结果。添加(新的ValidationResult(“周末以外需要休假”);
}
返回结果;
}
}

如果您将属性检查与IValidatableObject相结合,请务必注意。

您可以在MVC中创建自己的自定义验证属性。此链接将帮助您创建这些属性。您是指万无一失的
RequiredIf
属性吗?(如果是,添加标记)我添加了标记,但不起作用。您能给出使用万无一失的RequiredIf属性的示例代码吗@Stephen MueckeNo,我的意思是问题底部的标签列表(如果您使用的是万无一失的),如果不是,那么您使用的是什么
RequiredIf
属性?我不太清楚,因为我是.Net Mvc的初学者。并且RequiredIfAttribute类用于它。另外,通过使用System.ComponentModel.DataAnnotations,我已经完成了该属性。如果您知道解决方案,请帮助我@Stephen MueckeIt显示“不包含带1个参数的构造函数”@SukanyaAllowEmptyStrings不被接受,即以下类型被接受但不起作用。[RequiredIf(“星期日,星期六”,false)]请提供有关错误的更多详细信息。请参见RequiredIf属性的重载。