Si tengo en mi clase de modelo una propiedad de tipo, DateTime¿cómo puedo representarla en un formato específico, por ejemplo, en el formato que ToLongDateString()devuelve?
He probado esto ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... que genera una excepción porque la expresión debe apuntar a una propiedad o campo. Y esto...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... que no lanza una excepción, pero la salida renderizada está vacía (aunque valcontiene el valor esperado, como pude ver en el depurador).
¡Gracias por los consejos de antemano!
Editar
ToLongDateStringes solo un ejemplo. Lo que realmente quiero usar en lugar de ToLongDateStringes un método de extensión personalizado de DateTimey DateTime?:
public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
if (dateTime.TimeOfDay == TimeSpan.Zero)
return dateTime.ToString("d");
else
return dateTime.ToString("g");
}
public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
if (dateTime.HasValue)
return dateTime.Value.FormatDateTimeHideMidNight();
else
return "";
}
Entonces, creo que no puedo usar el DisplayFormatatributo y el DataFormatStringparámetro en las propiedades de ViewModel.
fuente

Puede decorar la propiedad de su modelo de vista con el
[DisplayFormat]atributo:y en tu opinión:
o, para mostrar el valor,
Otra posibilidad, que no recomiendo, es utilizar un ayudante de tipo débil:
fuente
DateTime(ToLongDateString fue solo un ejemplo), por lo que es poco probable que pueda usarDataFormatString.@Html.DisplayFor(x => x.MyDateTime)? @NickLarsen, esa es la razón por la que se deben usar modelos de vista. En mi ejemplo, decoro el modelo de vista con este atributo y una vista ya está vinculada a una vista determinada, ese es su propósito.Salida con formato simple dentro del modelo
o en el bucle foreach
fuente
string.FormatUtilizo el siguiente enfoque para formatear en línea y mostrar una propiedad de fecha del modelo.
De lo contrario, al completar un TextBox o Editor, podría hacer como sugirió @Darin, decorar el atributo con un
[DisplayFormat]atributo.fuente
Si todos sus
DateTimetipos se representan de la misma manera, puede usar unaDateTimeplantilla de visualización personalizada .En su carpeta Vistas, cree una carpeta llamada "DisplayTemplates", ya sea en la carpeta de vistas específicas de su controlador o en la carpeta "Compartida" (funcionan de manera similar a las parciales).
En el interior, cree un archivo llamado
DateTime.cshtmlque tomaDateTimecomo@modelcódigo y cómo desea representar su fecha:Ahora puede usar esto en sus vistas y debería funcionar:
Siempre que siga la convención de agregarlo a la carpeta "DisplayTemplates" y nombrar el archivo para que coincida con el tipo que está mostrando, MVC lo usará automáticamente para mostrar sus valores. Esto también funciona para editar escenarios usando "EditorTemplates".
Aquí hay más información sobre las plantillas .
fuente
DateTime. Sin embargo, tengo algunas propiedades DateTime que aceptan valores NULL. Intenté crear un segundo archivo en laDisplayTemplatescarpeta, llamadoNullableDateTime.cshtmly dentro:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()AquíMyCustomExtensionhay un método de extensión enDateTime?. Sin embargo, ¿obtiene una excepción cuando un DateTime? El campo es realmente nulo y me dice que el diccionario requiere un elemento de modelo de tipoDateTimeque no es nulo. ¿Hay alguna forma de definir un DisplayTemplate para un DateTime anulable?NullableDateTime.cshtmly usaría el enfoque que @NickLarsen sugirió y usaría@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime").Mi preferencia es mantener los detalles de formato con la vista y no con el modelo de vista. Entonces en MVC4 / Razor:
Referencia de formato de fecha y hora: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Luego tengo un selector de fecha JQuery vinculado a él, y eso pone la fecha en un formato diferente ... ¡doh!
Parece que necesito configurar el formato del selector de fechas con el mismo formato.
Así que estoy almacenando el
System.Globalizationformato en un atributo data- * y lo recopilo al configurar elY aquí está la parte desagradable: los formatos de .net y datepicker no coinciden, por lo que se necesita piratería:
eso es un poco débil, pero debería cubrir muchos casos.
fuente
funciona para mi
fuente
Recientemente tuve el mismo problema.
Descubrí que simplemente definir DataType como Date en el modelo también funciona (usando el enfoque Code First)
fuente
puedes hacer así
@item.Date.Value.Tostring("dd-MMM-yy");fuente
si solo quiero mostrar la fecha en formato corto, solo uso @ Model.date.ToShortDateString () e imprime la fecha en
fuente
Si todo lo que desea hacer es mostrar la fecha con un formato específico, simplemente llame a:
Dará como resultado el siguiente formato,
fuente
esto se mostrará en
dd/MM/yyyyformato en su VistaEn vista:
en lugar de
DisplayForusar este códigotambién verifica si el valor es nulo en la columna de fecha, si es verdadero, mostrará la fecha está vacía o la fecha formateada real de la columna.
La esperanza ayuda a alguien.
fuente
fuente
En MVC5 usaría, si su modelo es la fecha y hora
O si su modelo contiene la propiedad de la fecha y hora
Aquí está el significado oficial de los formatos:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
fuente
Ver solo ajuste de archivo como este. Puedes probar esto.
item.transdateson susDateTimedatos de tipo.fuente