【问题标题】:Validating that a Reason field is filled if Date field is today如果日期字段是今天,则验证是否填写了原因字段
【发布时间】:2012-10-28 09:08:34
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您似乎使用了一些不属于标准 ASP.NET MVC 4 包的非标准 RequiredIf 属性。

    如您所知,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; }
    
        ...
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的建议。我更喜欢在我的 ViewModel 中进行验证。如果真的没有其他解决方案(答案),那么我会像你一样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多