必需如果对MVC4中的两个变量进行条件验证

时间:2015-02-05 05:46:51

标签: 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; }

我想使用星期六和星期日字段在Holiday字段中使用RequiredIf条件。我可以像下面那样使用

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

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

3 个答案:

答案 0 :(得分:13)

也许在你的模特中试试这个:

[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; }

答案 1 :(得分:1)

如果需要进行更复杂的验证,我建议实现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;
    }
}

如果将属性检查与IValidatableObject结合使用,请确保注意this behaviour

答案 2 :(得分:0)

我的项目中有必填项。

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

[RequiredIf("SalesID==1", ErrorMessage = "License is required.")]
public string License{ get; set; }

显示错误消息“需要许可证”。当SalesID为1时,许可证保留为空白。如果SalesID为1,则许可证不能为空。

对于您的代码,它应该类似于

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

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