ASP.NET MVC以dd / MM / yyyy格式显示日期

时间:2013-07-18 16:02:20

标签: asp.net-mvc

问题是我希望以“{0:dd / MM / yyyy}”格式显示日期为只读或禁用,遵循博客的解决方案我没有得到预期的结果,因为当我使用DisplayFor助手时用于以正确的形式显示日期但当我发布时,日期的值更改为{01/01/0001 12:00:00 am},并接收下一个错误“将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);
    }

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

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

您应该在View中使用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;
    }
}

答案 1 :(得分:0)

尝试使用此功能显示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