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 val
contiene el valor esperado, como pude ver en el depurador).
¡Gracias por los consejos de antemano!
Editar
ToLongDateString
es solo un ejemplo. Lo que realmente quiero usar en lugar de ToLongDateString
es un método de extensión personalizado de DateTime
y 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 DisplayFormat
atributo y el DataFormatString
pará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.Format
Utilizo 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
DateTime
tipos se representan de la misma manera, puede usar unaDateTime
plantilla 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.cshtml
que tomaDateTime
como@model
có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 laDisplayTemplates
carpeta, llamadoNullableDateTime.cshtml
y dentro:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
AquíMyCustomExtension
hay 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 tipoDateTime
que no es nulo. ¿Hay alguna forma de definir un DisplayTemplate para un DateTime anulable?NullableDateTime.cshtml
y 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.Globalization
formato 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/yyyy
formato en su VistaEn vista:
en lugar de
DisplayFor
usar 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.transdate
son susDateTime
datos de tipo.fuente