c# - 验证失败后发布时 ASP.NET MVC DateTime 值未保存
问题描述
我有一个需要输入 2 个日期的表格。一个必须在另一个之后。我设置了一个自定义验证器来处理这个问题。如果较晚的日期无效,验证器将触发并按预期显示错误消息。如果随后将日期更正为有效日期,则会将其作为“01/01/0001”发布到服务器。更正后的日期不会发送到服务器。
模型:
[Display(Name = "Start")]
public DateTime Start { get; set; }
[Display(Name = "End")]
[CustomTimeRangeEnd(ErrorMessage = "End Date is required and must be a valid date after Start Date")]
public DateTime End { get; set; }
验证器:
public class CustomTimeRangeEndAttribute : ModelAwareValidationAttribute
{
static CustomTimeRangeEndAttribute()
{
Register.Attribute(typeof(CustomTimeRangeEndAttribute));
}
public override bool IsValid(object value, object container)
{
var model = (ICustomTimeRange)container;
if (value == null) return false;
DateTime dt;
var validdt = DateTime.TryParse(value.ToString(), out dt);
if (!validdt) return false;
if (dt < model.Start) return false;
return true;
}
看法:
@Html.LabelFor(x => x.Start, new { @class = "control-label" })<br />
<input type="date" name="Start" id="Start" />
@Html.LabelFor(x => x.End, new { @class = "control-label" })<br />
<input type="date" name="End" id="End" />
解决方案
正如@TanvirArjel 所说,如果将其发布为“01.01.0001”,您的观点就有问题。如果您使用 datepicker 检查他们的时间格式,您可以添加到您的代码中
dateformat:'dd-mm-yy'
提供它。喜欢
$('#end').datepicker({
dateformat:'dd-mm-yy'
});
推荐阅读
- asp-classic - 为什么某些站点不能使用服务器端脚本 (ASP) 通过 XMLHTTPREQUEST 加载,但我可以使用 javascript 加载?
- microservices - 微服务应该有多小?
- ruby-on-rails - 如何在我的视图中访问我的 Rails 辅助方法?“提供的位置为零。无法构建 URI”
- c - Windows Hook 保存语言字符
- xml - 未解析以编程方式创建的 TXMLDocument 对象
- r - y 轴上类别之间的空间
- mysql - 如何进一步过滤 SELECT 查询的结果?
- angular - 如何使用数组中的日期保存对象?
- python - 如果存在,如何从列表中调用函数
- c++ - 为什么在构造函数中创建线程时实例化对象和对象指针的行为不同?