7

我有一個包含某些日期和時間屬性的模型。與@ Html.TextBoxFor()一起使用時,DisplayFormat屬性的DataFormatString參數不起作用

的時間屬性有下列DataAnnotation:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")] 

和日期的屬性有:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 

然而,當我使用@Html.EditorFor()而不是@Html.TextBoxFor()這些只是尊重。

我目前的情況不會允許我使用EditorFor,那麼我如何強制TextBoxFor尊重這些格式字符串?

+0

爲什麼你必須使用'TextBoxFor'? – DarthVader

+0

驗證無法正確使用'EditorFor's。我們一直在調查沒有出現。 – Kehlan

+0

驗證可能與您在應用中使用的'CultureInfo'有關。 – DarthVader

回答

14

你可以嘗試以下方法:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}") 

還有一個重載需要HTML屬性,所以你可以設置CSS類,絲起來datepickers等:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" }) 
+0

爲什麼'@ class =「input-large」'? – Kehlan

+0

只是說你可以運用你的風格。如jQuery日期選擇器 – DarthVader

+0

Gotcha。想想我最終會堅持使用這個解決方案。 – Kehlan

0

也許延伸方法可以創建:

public static MvcHtmlString DateTimeFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) 
    { 
     var compilationResult = expression.Compile(); 
     TValue dateValue = compilationResult((TModel)html.ViewDataContainer.ViewData.Model); 
     var body = (MemberExpression)expression.Body; 
     return html.TextBox(body.Member.Name, (Convert.ToDateTime(dateValue)).ToCustomDateFormat(), new { id = body.Member.Name, datepicker = true }); 
    } 

ToCustomDateFormat方法可能是一個擴展方法爲dat eTime類型,以所需的格式返回字符串值。

用法:

@Html.DateTimeFor(x=>x.AnyDateTimeProperty) 

這樣,所有日期時間變量的格式可以從一個單一的功能來控制。對我來說工作得很好(對DateTimeDateTime?屬性),儘管我不確定在運行時編譯表達式是個好主意。

0

一種選擇我爲這個工作:

@Html.TextBoxFor(m => m.Patient.DOB, new { @Value = string.Format("{0:MM/dd/yyyy}", Model.EndDate) }) 
0

在MVC5你可以叫你考慮到避免重複的日期時間格式定義的顯示格式,只需編寫了以下方法:

@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0])