【问题标题】:The value 'XX/YY/ZZZZ" is not valid for DateTime variable值“XX/YY/ZZZZ”对 DateTime 变量无效
【发布时间】:2014-05-10 13:19:24
【问题描述】:

在我的网页上,我输入了我保留当前日期的位置:

@Html.TextBoxFor(model => model.CreationDate, new { @class = "form-control datepicker", @Value = DateTime.Now.ToString("dd'/'M'/'yyyy"), type = "datetime" })

渲染成:

<input value="31/3/2014" class="form-control datepicker" data-val="true" data-val-date="The field CreationDate must be a date." data-val-required="Data jest wymagana" id="CreationDate" name="CreationDate" type="datetime">

如您所见,默认数据为31/3/2014

但是当我尝试使用 Ajax 将其发送到我的方法时,我收到了来自 ModelState 的错误:

The value "31/3/2014" is not valid for CreationDate.

这就是模型中的内容:

+       CreationDate    {0001-01-01 00:00:00}   System.DateTime

给这个输入框也设置bootstrap datepicker:

$('.datepicker').datepicker({
        format: "dd/MM/yyyy",
        language: "pl",
        autoclose: true,
        todayHighlight: true
    });

返回如下数据:

"31/Marzec/2014"

以及ModelState.Valid=true上方的数据

但需要输入框默认数据有效。用户仅在需要更改当前日期以外的数据时才应使用 Datepicker。

我应该如何修改我的代码?我尝试在toString() 中弄乱格式,但没有任何效果。

这是我的模型:

public class CreateDeviceInstance
{
    public int Id { get; set; }
    public int DeviceId { get; set; }
    public string SerialNo { get; set; }
    [Required(ErrorMessage="Data jest wymagana")]
    public System.DateTime CreationDate { get; set; }
    public Nullable<int> ProjectId { get; set; }
    public bool Issue { get; set; }
    public string IssueDetails { get; set; }
    public Nullable<int> StorageId { get; set; }
    public bool MeAsUser { get; set; }
}

【问题讨论】:

  • "dd'/'M'/'yyyy" 在我看来有点可疑。那些单引号正确吗?
  • @RajaDani:那行不通,因为m 是几分钟,而不是几个月。
  • @Cerbrus 单引号是斜线的转义标记。没有它们,日期字符串如下31-03-2014
  • dd/MM/yyyy 将不起作用。使用 MM/dd/yyyy。它会工作
  • 啊,有道理:)

标签: c# javascript jquery asp.net-mvc


【解决方案1】:

您最初使用的是"dd'/'M'/'yyyy" 格式,

 (DateTime.Now.ToString("dd'/'M'/'yyyy"))

"dd/MM/yyyy" 稍后格式,

 format: "dd/MM/yyyy"

这不好。
在这两种情况下使用相同的格式(我建议"dd/MM/yyyy")。

【讨论】:

  • 检查过了。更改后仍然无效,因为模型中的CreationDate = + CreationDate {0001-01-01 00:00:00} System.DateTime
  • 此行不在问题中发布的代码中
  • 对不起。我尽快编辑问题,因为我意识到我没有粘贴它
  • 顺便说一句,0001-01-01 是 C# 中不可为空的 DateTime 的默认值 - 如果您希望日期选择器在今天的日期开始,您可以尝试将其设为可空。
【解决方案2】:

试试这个

public class CreateDeviceInstance 
{    
    public int Id { get; set; }
    public int DeviceId { get; set; }
    public string SerialNo { get; set; }
    [Required(ErrorMessage="Data jest wymagana")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public System.DateTime CreationDate { get; set; }
    public Nullable<int> ProjectId { get; set; }
    public bool Issue { get; set; }
    public string IssueDetails { get; set; }
    public Nullable<int> StorageId { get; set; }
    public bool MeAsUser { get; set; }
}

【讨论】:

    【解决方案3】:
    DateTime.Now.ToString("dd/MM/yyyy")
    

    【讨论】:

      【解决方案4】:

      "31/Marzec/2014" 格式:"dd/MM/yyyy";不要使用大写字母来指定月份。引导日期选择器格式中的日期格式:“dd/mm/yyyy”您的结果将更改 31/03/2014

      【讨论】:

        猜你喜欢
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 2021-02-15
        • 2021-01-24
        • 2021-05-22
        • 2021-08-19
        • 1970-01-01
        相关资源
        最近更新 更多