问题是我希望以“{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);
}
有什么建议吗?谢谢!
答案 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。