【问题标题】:ASP.NET MVC 5: Creating custom validation for DateTime range attributeASP.NET MVC 5:为 DateTime 范围属性创建自定义验证
【发布时间】:2018-03-26 18:58:56
【问题描述】:

我正在尝试在我的 MVC 5 Web 应用程序中创建一个自定义属性,以验证 DateTime 字段是否在当前日期的 30 到 50 天内。如果日期不在 30 到 50 天窗口之间,则会引发错误。我尝试使用this post 来构建我的属性,但我不确定我的代码哪里出错了。目前,此代码已构建,但当我输入无效日期时没有任何反应。

public class CustomDateAttribute : RangeAttribute
{
    public CustomDateAttribute()
      : base(typeof(DateTime),
          DateTime.Now.AddDays(30).ToShortDateString(),
          DateTime.Now.AddDays(50).ToShortDateString()
        )
    { }
}

【问题讨论】:

  • 你在global.asax.cs注册了吗?
  • 我刚刚注册了,谢谢。我现在在运行代码时遇到了问题。无论日期是否在 30-50 天范围内,我都会不断收到错误消息“日期必须在 x 和 y 之间”。我尝试输入范围内的日期、最小/最大日期、范围外的日期,并且错误不会消失。但是,当我清除文本框时,错误会按预期消失。有什么想法吗?
  • 我猜你的意思是你得到一个客户端错误 - 你需要重新配置 $.validator 的日期范围(不知道你为什么接受这个答案 - 为什么要多写减少功能的代码)
  • 哇,我刚刚弄清楚如何使用您在我的另一篇文章中链接到的代码来修复您告诉我的客户端错误。是的,您的解决方案更有效(尽管我仍在思考我所做的事情)。谢谢。

标签: asp.net-mvc


【解决方案1】:

这应该可以满足您的需求。您不一定需要从 RangeAttribute 类继承来获得所需的功能。

[AttributeUsage(AttributeTargets.Property)]
public class CustomDateAttribute : ValidationAttribute
{
  public CustomDateAttribute(string errorMessage) : base(errorMessage) { }

  public override bool IsValid(object value)
  {
    if (value == null) return false;

    DateTime? dateTime = value as DateTime?;

    if (dateTime.HasValue)
    {
      return dateTime.Value >= DateTime.Now.AddDays(30) && dateTime.Value <= DateTime.Now.AddDays(50);
    }

    return false;
  }
}

【讨论】:

  • 我收到“value as DateTime”的错误,即“'as' 运算符必须与引用或可为空的类型一起使用(DateTime 不可为空)”有关如何操作的任何想法解决这个问题?
  • 您可以将value as DateTime 更改为Convert.ToDateTime(value) 或将变量dateTime 更改为可为空。
  • 遇到新错误。我的属性标签 [CustomDate] 现在出现错误“没有为所需的形式参数 errorMessage 提供参数”。关于这个有什么想法吗?对不起,这是我第一次这样做。我觉得自己很无能。
  • 是的,如果日期无效,您只需向它提供您希望它显示的错误消息。所以[CustomDate("Date is invalid")]。如果您不想每次都指定错误消息,则可以添加无参数构造函数并设置默认值。
  • 哦,哇。我觉得很笨。我试图将其作为 [CustomDate(ErrorMessage = "this is an error message")]。难怪它不起作用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
相关资源
最近更新 更多