2010-01-04 16 views
45

En mi modelo que tengo los siguientes DataAnnotations en una de mis propiedadesASP.Net MVC formatSalida

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

La anotación requerida funciona muy bien, he añadido los otros 2 para tratar de eliminar el tiempo. Se pone ligado a una entrada en la vista usando

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

Sin embargo cada vez que las cargas vista sigo teniendo el tiempo que aparece en el cuadro de entrada. ¿Hay alguna forma de eliminar esto usando DataAnnotations?

+0

Ver http://stackoverflow.com/q/1961114/2291 –

+0

Echa un vistazo a ... [http://stackoverflow.com/questions/1961114/date-only-from-textboxfor](http://stackoverflow .com/questions/1961114/date-only-from-textboxfor) y [http://stackoverflow.com/questions/726433/datetime-object-in-asp-net-mvc](http://stackoverflow.com/ preguntas/726433/datetime-object-in-asp-net-mvc) –

Respuesta

83

El atributo [DisplayFormat] solo se utiliza en EditorFor/DisplayFor, y no en las API HTML sin formato como TextBoxFor.

+5

Estoy usando la sintaxis MVC4 Razor, el campo de fecha se representa como '@ Html.EditorFor (m => m.IssueDate)' y el formateo en el modelo se aplica como '[DisplayFormat (DataFormatString =" {0: dd/MM/yyyy} ")]' pero la fecha aún se muestra como '01/01/0001 12:00:00 AM' – bjan

+7

@bjan ¿Ha establecido el 'ApplyFormatInEditMode' propiedad? –

26

Como Brad dijo que no funcionaba para TextBoxFor pero también necesitarás recordar agregar ApplyFormatInEditMode si quieres que funcione para EditorFor.

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

A continuación, utilice

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

Editor Para que me haya decepcionado. Tenía TextBoxFor - Eso funcionó para otros formatos, como números o etiquetas. +1 – ppumkin

6

Mi problema era establecer algunos atributos HTML (jquery-datepicker), por lo EditorFor había opción para mí.

La implementación de un ayudante-Methode encargo resuelto mi problema:

ModelClass con DateTime-Propiedad:

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

View con ModelClass como modelo:

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

ayudante-Methode en ayudante estática clase:

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