我在我的解决方案中使用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?
感谢。
答案 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; }
...
}