Tengo el siguiente código de maquinilla de afeitar que quiero tener mm/dd/yyyyformato 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 = truea 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
DisplayForayudante 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/2015Por ú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úsculaMa minúsculamen 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.DisplayForayudante. 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 elDisplayForayudante?@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 aceptaFormatpará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
Threadel 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
CurrentCulturevalor de la propiedad:Fuente: MSDN CurrentCulture
Nota: La
CurrentCultureconfiguració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
CurrentCulturepropiedad, 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"); } } @shortDateLocalFormatPor encima de la
@shortDateLocalFormatvariable 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
ThreadlaCurrentCulturepropiedad 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
@modelno reconoceMcuando se usa en la página HTML, minúsculamal declarar.No overload for method 'ToString' takes 1 argumentsquejá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
HtmlStringsalidaDisplayFor, la convierte en aString, la analiza como aDateTimey 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 argumentserror.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.Emptyfuente
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'