首页 > 解决方案 > 验证失败后发布时 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" />

标签: c#htmlasp.net-mvcpostasp.net-mvc-5.2

解决方案


正如@TanvirArjel 所说,如果将其发布为“01.01.0001”,您的观点就有问题。如果您使用 datepicker 检查他们的时间格式,您可以添加到您的代码中

dateformat:'dd-mm-yy'

提供它。喜欢

$('#end').datepicker({
dateformat:'dd-mm-yy'
});

推荐阅读