0

问题是我想以“{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);
    }

有什么建议吗,谢谢!

4

2 回答 2

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

显然更改格式以满足您的需求。在这里查看更多。

于 2013-07-18T20:41:22.810 回答
0

您没有从视图中收到 F_Alta 的值,因为您既没有输入也没有隐藏字段。“01/01/0001 12:00:00 am”只是 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;
    }
}
于 2013-07-18T18:24:04.747 回答