0

我在我的解决方案中使用 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 的第三个参数必须是一个常量表达式,...

知道如何仅当日期字段为今天时才强制用户输入紧急原因?

谢谢。

4

2 回答 2

0

C# 不支持DateTime文字,解决方法是使用Stringlike this,但它不会解决您的问题。我建议你把验证码移到里面Controller并返回一个ModelState.AddModelError("EmergencyReason", "Emergency Reason is required")

于 2012-10-28T09:58:37.400 回答
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; }

    ...
}
于 2012-10-28T16:14:06.403 回答