Tengo el siguiente código de maquinilla de afeitar que quiero tener mm/dd/yyyy
formato de fecha:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
He probado varios enfoques diferentes, pero ninguno de ellos funciona en mi situación.
mi AuditDate es un DateTime?
tipo
Intenté algo como esto y obtuve este error:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Información adicional: las plantillas solo se pueden usar con acceso a campo, acceso a propiedad, índice de matriz de una dimensión o expresiones de indexación personalizadas de un solo parámetro.
Intenté esto:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Ninguna sobrecarga para el método 'ToString' toma 1 argumentos
fuente
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
a la propiedad:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Debería ser obvio, pero cuando estás todo el no-tiempo-de-residuos-copiar-pegar esa pista de IntelliSense podría ir más allá de su nariz como lo hizo la mía :)Si simplemente está generando el valor de esa propiedad del modelo, no necesita el
DisplayFor
ayudante html, simplemente llámelo directamente con el formato de cadena adecuado .Audit Date: @Model.AuditDate.Value.ToString("d")
Debería salir
Audit Date: 1/21/2015
Por último, su fecha de auditoría podría ser nula, por lo que debe realizar la verificación condicional antes de intentar formatear un valor anulable.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Buscar en Google el error que está obteniendo proporciona esta respuesta , que muestra que el error se debe al uso de la palabra Modelo en sus ayudantes Html. Por ejemplo, usando
@Html.DisplayFor(Model=>Model.someProperty)
. Cámbielos para usar algo diferente aModel
, por ejemplo:@Html.DisplayFor(x=>x.someProperty)
o cambie la mayúsculaM
a minúsculam
en estos ayudantes.fuente
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
ayudante. No hagas eso. Además, ¿está seguro de que está arrojando el error en esa línea y no en alguna otra propiedad en la que está intentando usar elDisplayFor
ayudante?@Model...
, recibo este error: 'Modelo' entra en conflicto con la declaración System.Web.Mvc.WebViewPage <TModel> .Model 'He estado usando este cambio en mi código:
código antiguo:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
nuevo:
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
fuente
La respuesta de @ ChrisPratt sobre el uso de Display Template es incorrecta. El código correcto para que funcione es:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
Esto se debe
.ToString()
aNullable<DateTime>
no aceptaFormat
parámetros .fuente
Implementé algo similar de esta manera:
2. Dé contorno cero y borde cero a TextBox en css.
.my-style { outline: none; border: none; }
Y ... ya está hecho :)
fuente
Para mi fue suficiente usar
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
fuente
Puede usar el atributo [ DisplayFormat ] en su modelo de vista ya que desea aplicar este formato para todo el proyecto.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
fuente
Después de investigar un poco, terminé configurando
Thread
el valor CurrentCulture para tener CultureInfo ("en-US") en el método de acción del controlador:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Aquí hay algunas otras opciones si desea tener esta configuración en cada vista.
Sobre el
CurrentCulture
valor de la propiedad:Fuente: MSDN CurrentCulture
Nota: La
CurrentCulture
configuración de propiedad anterior probablemente sea opcional si el controlador ya se está ejecutando conCultureInfo("en-US")
o similar donde está el formato de fecha"MM/dd/yyyy"
.Después de configurar la
CurrentCulture
propiedad, agregue un bloque de código para convertir la fecha al"M/d/yyyy"
formato en la vista:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Por encima de la
@shortDateLocalFormat
variable está formateada conToString("M/d/yyyy")
obras. SiToString("MM/dd/yyyy")
se usa, como lo hice primero, terminará teniendo cero problemas . También funciona como recomendado por TommyToString("d")
. Realmente"d"
significa "Patrón de fecha corta" y también se puede utilizar con diferentes formatos de cultura / idioma.Supongo que el bloque de código de arriba también se puede sustituir por algún método de ayuda interesante o similar.
Por ejemplo
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
se puede utilizar con esta llamada de ayuda
@DateFormatter(Model.AuditDate)
Actualización , descubrí que hay una forma alternativa de hacer lo mismo cuando se usa el método DateTime.ToString (String, IFormatProvider) . Cuando se utiliza este método, no es necesario utilizar
Thread
laCurrentCulture
propiedad de. SeCultureInfo("en-US")
pasa como segundo argumento -> IFormatProvider alDateTime.ToString(String, IFormatProvider)
método.Método de ayuda modificado:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
fuente
Tal vez intente simplemente
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
también puede usar muchos tipos de formato de cadena como .ToString ("dd MMM, aaaa") .ToString ("d") etc.
fuente
@model
no reconoceM
cuando se usa en la página HTML, minúsculam
al declarar.No overload for method 'ToString' takes 1 arguments
quejándose cuando usoToString("mm/dd/yyyy")
En vista Reemplace esto:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Con:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Explicación: Si el valor de AuditDate no es nulo, formateará la fecha en dd / MM / aaaa; de lo contrario, déjela como está porque no tiene ningún valor.
fuente
Tuve un problema similar en mi controlador y esto es lo que funcionó para mí:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
"DateSigned" es el valor de mi modelo. La línea dice, si el valor del modelo tiene un valor, entonces formatee el valor; de lo contrario, no muestre nada.
Espero que ayude
fuente
Esta es la mejor manera de obtener una cadena de fecha simple:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
fuente
HtmlString
salidaDisplayFor
, la convierte en aString
, la analiza como aDateTime
y luego la formatea comoString
. Innecesariamente complejo, en mi opinión.Podrías usar Convertir
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
fuente
Vea esta respuesta sobre el
No overload for method 'ToString' takes 1 arguments
error.No puede formatear un DateTime que acepta valores NULL; debe usar la propiedad DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
fuente
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'