如果Date字段是今天,则验证是否填充了Reason字段

时间:2012-10-28 09:08:34

标签: asp.net asp.net-mvc

我在我的解决方案中使用ASP.NET MVC4。我有下面的ViewModel,我想验证只有当字段Date是今天才填充字段EmergencyReason。我试试这个:

public class LoadingViewModel
{
    public DateTime Date { get; set; }

    [RequiredIf("Date", Comparison.IsEqualTo, DateTime.Today)]
    public string EmergencyReason { get; set; }
    ...
}

它不起作用。 RequiredIf的第三个参数必须是常量表达式,...

我知道如果今天只有Date字段,我怎么强迫用户输入EmergencyReason?

感谢。

2 个答案:

答案 0 :(得分:0)

C#不支持DateTime字面值,解决方法是使用String this,但它无法解决您的问题。我建议您在Controller内移动验证码并返回ModelState.AddModelError("EmergencyReason", "Emergency Reason is required")

答案 1 :(得分:0)

您似乎正在使用某些非标准RequiredIf属性,该属性不属于标准ASP.NET MVC 4程序包。

如您所知,C#允许您仅将常量值传递给属性。因此,一种可能性是编写自定义属性:

public class RequiredIfEqualToTodayAttribute: RequiredIfAttribute
{
    public RequiredIfEqualToTodayAttribute(string field)
        : base(field, Comparison.IsEqualTo, DateTime.Today)
    {
    }
}

然后:

public class LoadingViewModel
{
    public DateTime Date { get; set; }

    [RequiredIfEqualToToday("Date")]
    public string EmergencyReason { get; set; }

    ...
}