如何解决如何使用 Razor Page 中的模型绑定验证来验证日期是否过去
抱歉,如果这是一个愚蠢的问题 - 我是 Razor 页面和 ASP.Net Core 的新手。
我有一个页面设置了数据绑定和模型上定义的各种属性,以提供一些基本的客户端验证,它们工作正常,但是我有一个日期字段,我需要确保它没有被设置为未来日期。
我知道如何验证日期是过去的 - 这不是问题 - 但我希望能够验证日期并在字段下方的跨度中显示错误消息,就像我在必填字段中所做的那样丢失,长度错误等
我假设我可以沿着
行向模型上的属性添加一些属性 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy},ApplyFormatInEditMode = true)")]
[Range(typeof(DateTime),"01/01/1980",DateTime.Today.ToString(),ErrorMessage = "Value must be in the past")]
public DateTime Date { get; set; }
但是我得到了一个错误,即我只能使用常量(我曾担心是这种情况)。
接下来,我查看了是否可以使代码中的该字段无效,但我不知道您将如何做到这一点,而且我无法在任何地方找到可比较的示例。我想我可以在页面的 ModelState 中添加一个错误,但我看不到如何。
正如我所说,我可以想到许多其他的验证方式,但我希望验证错误的呈现方式与其他属性驱动的验证方式相同。
感谢收到任何帮助。
解决方法
好的...找到 (a) 解决方案...
我创建了一个自定义验证方法
public class CustomValidationMethods
{
public static ValidationResult PastDate(DateTime date)
{
return DateTime.Compare(date,DateTime.Today) > 0 ? new ValidationResult("Date cannot be in the future") : ValidationResult.Success;
}
}
并将其添加到模型定义中
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
[CustomValidation(typeof(CustomValidationMethods),nameof(CustomValidationMethods.PastDate))]
public DateTime Date { get; set; }
我不知道这是否是最好的答案,但它有效并且对我来说很有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。