【问题标题】:ASP.NET MVC DateTime value not saving when posted after failed vaildation验证失败后发布时 ASP.NET MVC DateTime 值未保存
【发布时间】:2019-02-04 22:51:00
【问题描述】:

我有一个需要输入 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" />

【问题讨论】:

  • 澄清一下,这两个日期都在最初发布的服务器上?出现验证错误时,HTML 日期输入的名称或 id 属性是否会改变?
  • 是的,两者都在初始发布时到达服务器。如果出现错误,name 和 id 属性不会改变。
  • @RossD it gets posted to the server as "01/01/0001".- 这意味着您的值没有从视图传递到控制器。
  • 最好提供控制器操作和ICustomTimeRange 定义,因为仍然缺少一些重现问题的重要信息。据我所知,date 输入默认具有yyyy-MM-dd 格式,但您使用的是dd/MM/yyyyMM/dd/yyyy

标签: c# html asp.net-mvc post asp.net-mvc-5.2


【解决方案1】:

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

dateformat:'dd-mm-yy'

提供它。喜欢

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2012-04-27
    • 1970-01-01
    • 2016-01-23
    • 2011-02-11
    • 2010-11-24
    相关资源
    最近更新 更多