发布后的格式文本框忽略格式

时间:2018-10-15 14:00:48

标签: c# razor asp.net-core-mvc

我有一个需要在编辑器上显示的属性

[Display(Name = "Created on")]
[UIHint("DateDisabled")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
public DateTime? CreationDate { get; set; }

模板编辑器如下

@model DateTime?

@{
   var culture = ...// retrieve culture;
}

@Html.TextBoxFor(m => m, "{0:"+ culture.DateTimeFormat.ShortDatePattern+"}",
   new { @class = "form-control", style = "width:100%", disabled = "disabled" })

在一个视图中,我正在使用类似的东西

@Html.HiddenFor(m => m.CreationDate)
@Html.EditorFor(m => m.CreationDate)

该表单包含其他字段。打开编辑器后,CreationDate看起来不错

<input name="CreationDate" id="CreationDate" type="hidden" value="10/12/2018 11:14:10 AM">
<input name="CreationDate" disabled="disabled" class="form-control" id="CreationDate" style="width: 100%;" type="text" value="10/12/2018">

但是如果表单包含错误的值并且服务器回发了

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Update(Model viewModel)
{
    if (!ModelState.IsValid)
    {
        return View("Edit", Model);
    }
    ...
}

创建日期忽略了格式,并且生成的html看起来像这样

<input name="CreationDate" id="CreationDate" type="hidden" value="10/12/2018 11:14:10 AM">
<input name="CreationDate" disabled="disabled" class="form-control" id="CreationDate" style="width: 100%;" type="text" value="10/12/2018 11:14:10 AM">

您会看到格式被忽略,并显示了完整的日期和时间。

这是设计功能吗?发生错误后,我该怎么做才能影响日期显示?

1 个答案:

答案 0 :(得分:0)

对于您的问题,建议您尝试以下选项:

  1. 更改模型,例如:

    [Display(Name = "Created on")]
    [UIHint("DateDisabled")]
    [DataType(DataType.Date)]
    //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd\/MM\/yyyy}")]
    public DateTime? CreationDate { get; set; }
    
  2. 将视图更改为:

    @Html.TextBoxFor(model => model.CreationDate, @"{0:yyyy\/MM\/dd}", new { @class = "datepicker" })