【问题标题】:Client side validation: Permit only old date from calender客户端验证:仅允许日历中的旧日期
【发布时间】:2016-10-13 13:24:31
【问题描述】:

如果我在模型中有此代码,我如何允许用户仅在 BirthDate 属性之前输入旧日期?

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public System.DateTime BirthDate { get; set; }

不使用 JavaScript 可以实现吗?如果是,怎么做?

【问题讨论】:

  • 旧日期是什么意思?
  • 你的意思是如果你有一个财产生日并且用户输入一个日期,即 11/12/1995。如果用户想要编辑生日,他们可以输入任何小于 11/12/1995 的日期,即 10/12/1994?
  • 使用条件验证属性,例如foolproof [LessThan] 属性(或自己编写)
  • @StephenMuecke 我为此编写了一个自定义验证器。但是,用户仍然可以查看未来的日期,即日历仍然显示未来的日期。有没有办法限制日历显示指定范围之间的日期?

标签: c# asp.net-mvc razor


【解决方案1】:

您应该扩展RangeAttribute 来装饰DateTime 模型字段。

例如,您可以创建一个新的验证属性:BirthDateAttribute

public class BirthDateAttribute : RangeAttribute {

   public BirthDateAttribute() 
                   : base(
                           typeof(DateTime), 
                           DateTime.Now.AddYears(-120).ToShortDateString(), 
                           DateTime.Now.AddDays(-1)ToShortDateString()
                     ) { } 
}

然后,您可以应用它来装饰您的 DateTime 属性:

[BirthDateAttribute]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public System.DateTime BirthDate { get; set; }

【讨论】:

  • 如果我将 MVC 与 EF 一起使用,我应该在哪里编写此自定义验证器?
  • 无处不在,但我建议您在模型文件夹中写入一个子文件夹 ValidationExtension 并在那里添加一个类文件 BirthDateAttribute.cs.. 使用与模型相同的命名空间。然后用新属性装饰你的模型
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多