【问题标题】:ASP.NET MVC display date in format dd/MM/yyyyASP.NET MVC 以 dd/MM/yyyy 格式显示日期
【发布时间】:2013-07-19 12:02:53
【问题描述】:

问题是我想以“{0:dd/MM/yyyy}”格式将日期显示为只读或禁用,按照博客的解决方案我没有得到预期的结果,因为当我使用 DisplayFor 帮助器时适用于以正确的形式显示日期,但是当我发布时,日期的值更改为 {01/01/0001 12:00:00 a.m.},并收到下一个错误“将 datetime2 数据类型转换为 smalldatetime数据类型导致的值超出范围。语句已终止。"

我认为的代码:

 <div class="editor-label">
        @Html.LabelFor(model => model.F_Alta, "Fecha de alta:")
 </div>
 <div class="editor-field">
        @Html.DisplayFor(model => model.F_Alta)
 </div>

我的班级:

[MetadataType(typeof(AlmacenMetaData))]
public partial class Almacen
{
}

public class AlmacenMetaData
{

    [Required(ErrorMessage = MensajesValidacionAlmacen.DescripcionRequerido)]
    [StringLength(32, ErrorMessage = MensajesValidacionAlmacen.DescripcionLongitud)]
    public object D_Almacen
    {
        get;
        set;
    }

    [DisplayFormat(DataFormatString = Formatos.Fecha, ApplyFormatInEditMode = true)]
    public object F_Alta
    {
        get;
        set;
    }
}

我的控制器中的代码:

    [HttpPost]
    public ActionResult Editar(Almacen almacen)
    {
        if (ModelState.IsValid)
        {
            db.Almacen.Attach(almacen);
            db.ObjectStateManager.ChangeObjectState(almacen, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(almacen);
    }

有什么建议吗?谢谢!

【问题讨论】:

  • 您为什么要对显示用户的字段应用验证,而不是用户输入?
  • 你的控制器在做什么?
  • @user982511 从控制器粘贴一些代码。此外,Date{01/01/0001 12:00:00 a.m.} 具有相同的格式,因此,哪一行会给您错误。可以贴一下吗?
  • 只接收一个 almacen 的实体,但总是接收修改为 01/01/0001 12:00:00 a.m. 的值

标签: asp.net-mvc


【解决方案1】:

您没有从视图中收到 F_Alta 的值,因为您既没有输入也没有隐藏字段。 “01/01/0001 上午 12:00:00”只是 DateTime 对象的默认值。 DateTime 永远不能为空。

您应该在视图中使用 EditorFor,而不是 DisplayFor。 DisplayFor 仅用于显示数据。此外,使用数据注释来定义您希望在标签中显示的内容,而不是在视图中对标签进行硬编码:

<div class="editor-label">
    @Html.LabelFor(model => model.F_Alta)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.F_Alta)
    @Html.ValidationMessageFor(model => model.F_Alta)
</div>

模型元数据类:

public class AlmacenMetaData
{

    [Required(ErrorMessage = MensajesValidacionAlmacen.DescripcionRequerido)]
    [StringLength(32, ErrorMessage = MensajesValidacionAlmacen.DescripcionLongitud)]
    public object D_Almacen
    {
        get;
        set;
    }

    [Display(Name = "Fecha de alta")]
    [DisplayFormat(DataFormatString = Formatos.Fecha, ApplyFormatInEditMode = true)]
    public object F_Alta
    {
        get;
        set;
    }
}

【讨论】:

    【解决方案2】:

    试试这个显示DateTime

    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
    public DateTime Date 
    {
        get
        {
            return DateTime.Now;
        }
        set
        {
            Date = DateTime.Now;
        }
    }
    

    将在视图中生成以下内容:

    @Html.DisplayFor(x => x.Date)        // 2013/05/23
    @Model.Date                          // 23/05/2013
    @Html.DisplayFor(x => Model.Date)    // 2013/05/23
    

    显然更改格式以满足您的需要。查看更多here

    【讨论】:

    • 我尝试使用您的解决方案,但不幸的是,当提交表单时,日期值更改为 01/01/0001 12:00:00 a.m.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多