MVC4中的两个变量需要进行RequiredIf条件验证

15

我有一个模型类正在遵循

 public bool Saturday{ get; set; }

 public bool Sunday{ get; set; }

 public string Holiday{ get; set; }

我想在“假日”字段上使用“RequiredIf”条件,同时使用“周六”和“周日”字段。我可以像下面这样使用吗?

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

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


你可以在MVC中创建自己的自定义验证属性,这个链接将帮助你创建它们:http://www.codeproject.com/Articles/301022/Creating-Custom-Validation-Attribute-in-MVC - Frebin Francis
你是在提到foolproof的RequiredIf属性吗?(如果是,请添加标签) - user3559349
我添加了标签,但是没有起作用。你能否给出使用foolproof的RequiredIf属性的任何示例代码?@Stephen Muecke - Md Aslam
不,我是指问题底部的标签列表(如果您正在使用 foolproof)。如果没有,那么您使用的是哪个“RequiredIf”属性? - user3559349
我不确定,因为我是 .Net Mvc 的初学者。而 RequiredIfAttribute 类被用于此目的。同时,我使用 System.ComponentModel.DataAnnotations 完成了该属性。如果您知道解决方案,请帮助我 @Stephen Muecke。 - Md Aslam
3个回答

23

也许你可以在你的模型中尝试这个:

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

2
如果需要更复杂的验证,我建议实现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结合使用,请注意此行为

值得注意的是,将属性名称作为字符串数组传递给 ValidationResult 的第二个参数,会触发绑定属性的验证 CSS。 - clamchoda

-2

我的项目中有 RequiredIf。

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

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

当License为空且SalesID为1时,它会显示错误消息“需要许可证”。如果SalesID为1,则License不能为空。

对于您的代码,应该是这样的:

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

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


1
它显示为“不包含一个参数的构造函数”@Sukanya - Md Aslam
不接受AllowEmptyStrings,即接受以下类型但无法使用。[RequiredIf("Sunday,Saturday",false)] - Md Aslam
请给我更多关于错误的细节。请查看 RequiredIf 属性的重载。 - Sukanya1991

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接