c# - 如何在 C# 中设置验证注释顺序
问题描述
date
我介绍了两个关于属性的注释。一种是验证日期范围(例如从 1 天后到 15 天后),另一种是验证时间范围(例如从上午 8.30 到下午 4.30)。如果该值都不满足两个验证,我希望网页提示错误消息CustomDateRange
而不是CustomTimeRange
. 目前,相反的情况正在发生。
[Required]
[CustomDateRange(ErrorMessage = "Your reservation time should be at least 24 hours and at most 15 days in advance.")]
[CustomTimeRange]
public DateTime? date { get; set; }
public class CustomDateRangeAttribute : RangeAttribute
{
public CustomDateRangeAttribute() : base(typeof(DateTime), DateTime.Now.AddDays(1).ToString(), DateTime.Now.AddDays(15).ToString())
{ }
}
public class CustomTimeRangeAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
try
{
DateTime dt = (DateTime)value;
TimeSpan ts = dt.TimeOfDay;
TimeSpan start = new TimeSpan(8, 30, 0);
TimeSpan end = new TimeSpan(16, 30, 0);
if (ts >= start && ts <= end)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Your reservation time should be with in the openning hours, which is from 8.30am to 4:30pm.");
}
}
catch (Exception e)
{
return new ValidationResult("Invalid time input!");
}
}
}
解决方案
为什么不在验证摘要中显示这两个错误?看看这个 - http://www.tutorialsteacher.com/mvc/htmlhelper-validationssummary
所以当一个错误完成时,比如时间,在保存时只会显示一个错误。
或者您可以像这样在日期小部件下方显示每条错误消息
@Html.ValidationMessageFor(model => model.CustomDateRange)
@Html.EditorFor(model => model.CustomDateRange)
...
@Html.ValidationMessageFor(model => model.CustomTimeRange)
@Html.EditorFor(model => model.CustomTimeRange)
但是,此时显示一个错误并不是一个好的做法,用户必须单击保存按钮让我们说 5 次以纠正一个错误,然后才能提交最终的错误清除保存。
推荐阅读
- python - Flask Restul 基本身份验证
- python - 如果它存在于另一个数据框中,则修改数据框中的行
- tensorflow - 无法启用 TensorFlow 急切执行
- kotlin - Kotlin 是否像 Python 一样有关键字“None”?
- ios - 推送导航控制器时出现异常 - iOS
- kotlin - Kotlin 中的 `?.apply`、`?.run` 和 `?.let` 之间的空值检查质量有什么区别吗?
- amazon-web-services - 使用带 boto3 的 ExternalQuestion 在 Amazon Mechnical Turk 上创建命中
- javascript - 节点js ajax上缺少谷歌翻译键
- jquery - IF 语句循环(重复)多次
- vaticle-typedb - 有没有办法“获取”所有连接的实体及其连接到实体特定实例的属性?