route - Cambiar el formato de fecha en la aplicación ASP.NET MVC
tag helper asp net core 2 (4)
Necesito cambiar el formato de fecha para que sea dd.MM.yyyy
. Recibo un error de validación del lado del cliente porque el formato de fecha MVC de ASP.NET es diferente de lo que esperaba en el servidor.
Para cambiar el formato de fecha de ASP.NET MVC, intenté:
Web.config:
<globalization uiCulture="ru-RU" culture="ru-RU" />
Modelo:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime? ServiceCreatedFrom { get; set; }
Plantilla de editor:
@model DateTime?
@Html.TextBox(string.Empty, (Model.HasValue
? Model.Value.ToString("dd.MM.yyyy")
: string.Empty), new { @class = "date" })
Ver:
@Html.EditorFor(m => m.ServiceCreatedFrom, new { @class = "date" })
Incluso Global.asax:
public MvcApplication()
{
BeginRequest += (sender, args) =>
{
var culture = new System.Globalization.CultureInfo("ru");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
};
}
Nada funcionó para mí.
Como una posible ayuda para identificar el problema, puede: 1. Establecer un punto de interrupción en el punto donde intenta formatear la fecha 2. Usar algo como la Ventana Inmediato en Visual Studio para evaluar el valor de
Thread.CurrentThread.CurrentCulture.Name
Si haces esto, ¿vuelve con la cultura "ru-RU"?
Estoy seguro de que no soy el único que estaría feliz de ayudarlo a solucionar este problema. Dicho esto, quizás alguien más rápido que yo pueda ver el problema de inmediato :).
Editar: parece que está usando Razor, por lo que debería poder establecer un punto de interrupción directamente en el archivo de vista en la línea donde está tratando de formatear la fecha.
Editar # 2:
Puede haber una manera más clara de hacerlo, pero si los datos del formulario se publican en dd.MM.yyyy, es posible que necesite un archivador de modelo personalizado, como por ejemplo:
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// custom bind the posted date
}
}
... que luego se asignaría como una carpeta modelo en, por ejemplo, ApplicationStart en Global.asax.cs.
Avíseme si cree que esto podría ayudar y puedo dar más detalles.
Lo siguiente debería funcionar:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime? ServiceCreatedFrom { get; set; }
y en tu plantilla de editor:
@model DateTime?
@Html.TextBox(
string.Empty,
ViewData.TemplateInfo.FormattedModelValue,
new { @class = "date" }
)
y entonces:
@Html.EditorFor(x => x.ServiceCreatedFrom)
El segundo argumento que estaba pasando a la llamada de EditorFor no hace lo que cree que hace.
Para esta plantilla de editor personalizado, como usted especificó explícitamente el formato en la propiedad de su modelo de vista, el elemento <globalization>
en su web.config y la cultura de hilos actual tendrá 0 efecto. El cultivo de hilos actual se usa con las plantillas estándar y cuando no [DisplayFormat]
el formato con el atributo [DisplayFormat]
.
Puede cambiar la referencia cultural actual en su archivo Global.asax, para nivel de aplicación Por ejemplo,
using System.Globalization;
using System.Threading;
protected void Application_BeginRequest(Object sender, EventArgs e)
{
CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
newCulture.DateTimeFormat.DateSeparator = "-";
Thread.CurrentThread.CurrentCulture = newCulture;
}
finalmente este me funcionó para obtener este formato dd / mm / aaaa. date = string.Format("{0}/{1}/{2}", Model.Value.Day, Model.Value.Month, Model.Value.Year);
primero crea la carpeta EditorTemplates en Sharedfolder, luego crea una plantilla de editor Datetime en Sharedfolder/EditorTemplates/Datetime.cshtml
luego sigue el enlace de arriba.
en vista
@Html.EditorFor(x => x.ServiceCreatedFrom)
la esperanza ayuda a alguien