C# ASP.NET MVC日期时间值在发布失败后未保存

C# ASP.NET MVC日期时间值在发布失败后未保存,c#,html,asp.net-mvc,post,asp.net-mvc-5.2,C#,Html,Asp.net Mvc,Post,Asp.net Mvc 5.2,我有一个表格,需要输入两个日期。一个接一个。我已经设置了一个自定义验证器来处理这个问题。如果以后的日期无效,验证程序将触发并显示预期的错误消息。如果随后将该日期更正为有效日期,则会将其作为“01/01/0001”发布到服务器。更正的日期无法发送到服务器 型号: [Display(Name = "Start")] public DateTime Start { get; set; } [Display(Name = "End")] [CustomTimeRangeEnd(ErrorMessage

我有一个表格,需要输入两个日期。一个接一个。我已经设置了一个自定义验证器来处理这个问题。如果以后的日期无效,验证程序将触发并显示预期的错误消息。如果随后将该日期更正为有效日期,则会将其作为“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;
    }
public类CustomTimeRangeEndAttribute:ModelAwareValidationAttribute
{
静态CustomTimeRangeEndAttribute()
{
属性(typeof(CustomTimeRangeEndAttribute));
}
公共覆盖布尔值有效(对象值,对象容器)
{
var模型=(ICustomTimeRange)容器;
if(value==null)返回false;
日期时间dt;
var validdt=DateTime.TryParse(value.ToString(),out dt);
如果(!validdt)返回false;
如果(dt
视图:

@Html.LabelFor(x=>x.Start,新的{@class=“control label”})
@Html.LabelFor(x=>x.End,新的{@class=“control label”})

正如@TanvirArjel所说,如果发布为“01.01.0001”,您的视图中会出现问题。如果您使用的是日期选择器,请检查其时间格式,您可以将其添加到代码中

dateformat:'dd-mm-yy'
提供它,就像

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

为了澄清,这两个日期都会在首次发布时发送到服务器?当出现验证错误时,HTML日期输入的名称或id属性是否会更改?是的,这两个日期都会在首次发布时发送到服务器。如果出现错误,名称和id属性不会更改。@RossD
会作为“01/01/0001”发送到服务器.
-这意味着您的值没有从视图传递到控制器。最好提供控制器操作和
ICustomTimeRange
定义,因为仍然缺少一些重现问题的重要信息。据我所知,默认情况下输入的
日期
格式为
yyyy-MM-dd
格式,但您正在声明
dd/M改为年月日
或年月日
$('#end').datepicker({
dateformat:'dd-mm-yy'
});