tutorial net mvc español asp asp.net asp.net-mvc

español - asp.net mvc versions



@ Html.DisplayFor-DateFormat("mm/dd/aaaa") (14)

Consulte esta respuesta sobre el No overload for method ''ToString'' takes 1 arguments error de No overload for method ''ToString'' takes 1 arguments .

No puede formatear un DateTime anulable: debe usar la propiedad DateTime.Value.

@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty

Consejo: Siempre es útil resolver esto en una clase estándar con inteligencia antes de ponerlo a la vista. En este caso, obtendría un error de compilación que sería fácil de detectar en una clase.

Tengo el siguiente código de maquinilla de afeitar que quiero tener el formato de fecha mm/dd/yyyy :

Audit Date: @Html.DisplayFor(Model => Model.AuditDate)

He intentado varios enfoques diferentes, pero ninguno de esos enfoques funciona en mi situación.

Mi fecha de auditoría es una fecha y hora DateTime? tipo

He intentado algo como esto y obtuve este error:

@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())

Información adicional: las plantillas se pueden usar solo con acceso de campo, acceso a propiedades, índice de matriz de una sola dimensión o expresiones de indexador personalizado de un solo parámetro.

Probé esto:

@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))

Ninguna sobrecarga para el método ''ToString'' toma 1 argumentos


Después de un poco de excavación y terminé configurando el valor CurrentCulture Thread para tener CultureInfo("en-US") en el método de acción del controlador:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

Estas son algunas otras opciones si desea tener esta configuración en cada vista.

Acerca del valor de la propiedad CurrentCulture :

El objeto CultureInfo("en-US") que devuelve esta propiedad, junto con sus objetos asociados, determina el formato predeterminado para fechas, horas, números, valores de moneda, el orden de clasificación del texto, las convenciones de mayúsculas y las comparaciones de cadenas.

Fuente: CultureInfo("en-US")

Nota: La configuración anterior de la propiedad CurrentCulture es probablemente opcional si el controlador ya se está ejecutando con CultureInfo("en-US") o similar donde el formato de fecha es "MM/dd/yyyy" .

Después de configurar la propiedad CurrentCulture , agregue el bloque de código para convertir la fecha al formato "M/d/yyyy" 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

Arriba, la variable @shortDateLocalFormat está formateada con ToString("M/d/yyyy") funciona. Si se ToString("MM/dd/yyyy") , como lo hice primero, entonces terminas teniendo un problema de cero inicial. También como lo recomienda Tommy ToString("d") funciona. En realidad, "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 con algún método de ayuda genial o similar.

Por ejemplo

@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }

se puede usar 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 la propiedad CurrentCulture Thread . CultureInfo("en-US") se pasa como segundo argumento -> IFormatProvider al IFormatProvider DateTime.ToString(String, IFormatProvider) .

Método auxiliar modificado:

@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }

.NET Fiddle


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 a dd / MM / aaaa, de lo contrario, déjelo como está porque no tiene valor.


Esta es la mejor manera de obtener una cadena de fecha simple:

@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()


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>


Implementé algo similar de esta manera:

  1. Use TextBoxFor para mostrar la fecha en el formato requerido y hacer que el campo sea de solo lectura .

@Html.TextBoxFor(Model => Model.AuditDate, "{0:dd-MMM-yyyy}", new{@class="my-style", @readonly=true})

2. Dé cero contorno y cero borde a TextBox en css.

.my-style { outline: none; border: none; }

Y ...... está hecho :)



Para mí fue suficiente usar

[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }


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


Puedes usar Convertir

<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>


Quizás intente simplemente

@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)

También puede utilizar muchos tipos de formato de cadena como .ToString ("dd MMM, aaaa") .ToString ("d"), etc.


Si simplemente está generando el valor de la propiedad de ese modelo, no necesita el ayudante DisplayFor html, solo DisplayFor directamente con el formato de cadena adecuado .

Audit Date: @Model.AuditDate.Value.ToString("d")

Debe salida

Audit Date: 1/21/2015

Por último, su fecha de auditoría podría ser nula, por lo que debe hacer 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 es de usar la palabra Modelo en sus ayudantes Html. Por ejemplo, usando @Html.DisplayFor(Model=>Model.someProperty) . Cambie estos para usar algo más que Model , por ejemplo: @Html.DisplayFor(x=>x.someProperty) o cambie la M mayúscula a una m minúscula en estos ayudantes.


Si utiliza DisplayFor , debe definir el formato mediante el atributo DisplayFormat o utilizar una plantilla de visualización personalizada. (Puede encontrar una lista completa de los DisplayFormatString preestablecidos here ).

[DisplayFormat(DataFormatString = "{0:d}")] public DateTime? AuditDate { get; set; }

O cree la vista Views/Shared/DisplayTemplates/DateTime.cshtml :

@model DateTime? @if (Model.HasValue) { @Model.Value.ToString("MM/dd/yyyy") }

Sin embargo, eso se aplicará a todos los DateTime s, incluso a aquellos en los que está codificando la hora. Si desea que se aplique solo a las propiedades de solo fecha, use Views/Shared/DisplayTemplates/Date.cshtml y el atributo DataType en su propiedad:

[DataType(DataType.Date)] public DateTime? AuditDate { get; set; }

La opción final es no usar DisplayFor y en su lugar representar la propiedad directamente:

@if (Model.AuditDate.HasValue) { @Model.AuditDate.Value.ToString("MM/dd/yyyy") }


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, formatee el valor; de lo contrario, no mostrará nada.

Espero que ayude