2010-01-04 51 views
45

在我的模型我有我的性質ASP.Net MVC DisplayFormat

[Required(ErrorMessage = "*")] 
[DisplayFormat(DataFormatString = "{0:d}")] 
[DataType(DataType.Date)] 
public DateTime Birthdate { get; set; } 

所要求標註的偉大工程之一以下DataAnnotations,我添加了其他2個嘗試和刪除的時間。它被綁定到視圖中的輸入使用

<%=Html.TextBoxFor(m => m.Birthdate, new { @class = "middle-input" })%> 

但是,每當視圖加載我仍然會得到時間出現在輸入框中。無論如何使用DataAnnotations刪除這個?

+0

請參閱http://stackoverflow.com/q/1961114/2291 – 2012-06-12 17:43:59

+0

看看... [http://stackoverflow.com/questions/1961114/date-only-from-textboxfor](http://stackoverflowflow .com/questions/1961114/date-only-from-textboxfor)and [http://stackoverflow.com/questions/726433/datetime-object-in-asp-net-mvc](http://stackoverflow.com/問題/ 726433/datetime-object-in-asp-net-mvc) – 2010-01-04 20:26:19

回答

83

[DisplayFormat]屬性僅用於EditorFor/DisplayFor,而不是TextBoxFor等原始HTML API。

+5

我使用MVC4 Razor語法,日期字段呈現爲@ Html.EditorFor(m => m.IssueDate)'和模型上的格式被應用爲'[DisplayFormat(DataFormatString =「{0:dd/MM/yyyy}」)]''但日期仍然顯示爲'01/01/0001 12:00:00 AM' – bjan 2012-03-06 06:51:03

+7

@bjan您是否設置了'ApplyFormatInEditMode'屬性? – 2012-12-11 15:43:56

26

正如Brad所說,它不適用於TextBoxFor,但如果您希望它爲EditorFor工作,還需要記住添加ApplyFormatInEditMode。

[DataType(DataType.Date), DisplayFormat(DataFormatString="{0:dd/MM/yy}", ApplyFormatInEditMode=true)] 
public System.DateTime DateCreated { get; set; } 

然後使用

@Html.EditorFor(model => model.DateCreated) 
+0

EditorFor把我扔了。我有TextBoxFor - 這適用於其他格式,如數字或標籤。 +1 – ppumkin 2013-07-03 10:35:20

6

我的問題是設置一些HTML屬性(jQuery的日期選擇器),所以EditorFor對我別無選擇。

實現自定義幫手,梅索德解決我的問題:

ModelClass與日期時間有關的特性:

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] 
public DateTime CustomDate{ get; set; } 

查看與ModelClass的型號爲:

@Html.TextBoxWithFormatFor(m => m.CustomDate, new Dictionary<string, object> { { "class", "datepicker" } }) 

助手-了Methode在靜態輔助等級:

public static class HtmlHelperExtension { 
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     return htmlHelper.TextBox(htmlHelper.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName), string.Format(metadata.DisplayFormatString, metadata.Model), htmlAttributes); 
    } 
}