2013-07-18 59 views
0

問題是,我希望以「{0:dd/MM/yyyy}」格式顯示日期爲只讀或禁用,遵循博客的解決方案沒有得到預期的結果,因爲當我使用DisplayFor幫助程序工作以正確的形式顯示日期,但是當我執行該帖子時,日期的值更改爲{01/01/0001 12:00:00 am},並接收下一個錯誤「將datetime2數據類型轉換爲smalldatetime數據類型導致超出範圍的值,該語句已終止。」ASP.NET MVC顯示日期的格式爲dd/MM/yyyy

代碼在我看來:

<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); 
    } 

任何建議?謝謝!

+1

爲什麼要將驗證應用於顯示*到用戶的字段,而不是由用戶輸入* – anaximander

+1

你的控制器在做什麼? – AntLaC

+0

@ user982511從控制器粘貼一些代碼。另外,'Date'與'{01/01/0001 12:00:00 a.m.}'具有相同的格式,因此,哪一行會給出錯誤。你能粘貼它嗎? –

回答

0

您沒有從視圖中接收F_Alta的值,因爲您既沒有輸入也沒有隱藏字段。 「01/01/0001 12:00:00 a.m.」只是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; 
    } 
} 
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

+0

我試圖使用您的解決方案,但不幸的是,在提交表單時,日期值更改爲01/01/0001 12 :上午00:00 –