Pregunta

Tengo un híbrido formularios web ASP.Net MVC / app. En una de las "páginas" MVC / puntos de vista, tengo que hacer un montón de fechas utilizando el ToShortDateString () y ToLongDateString (). Estos funcionan correctamente la mayoría de las veces, pero la primera vez que se carga la vista después de compilar la aplicación, que tienen un formato incorrecto.

Me trazó esta abajo y comprueba la cultura del hilo actual. Para el 99% del tiempo que es en-US, pero en la primera carga de la vista MVC después de compilar se establece en en-GB. Si vuelvo a cargar la página inmediatamente después de eso, es hora de volver a en-US.

He intentado fijar la cultura y uiculture en el archivo web.config para es-para forzarlo a ser correcta, pero no hubo suerte.

Alguien tiene alguna idea sobre esto? Bug en MVC?

Edit (código adicional y los intentos): Incluso si voy por la borda por completo e incluir esto en la clase base de la vista

public class DNViewPage<T> : ViewPage<T> where T : class
    {

        protected override void OnInit(EventArgs e) {
            base.OnInit(e);
            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;
        }

        protected void Page_Load(object sender, EventArgs e) {
            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;
        }

        protected override void InitializeCulture() {

            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;

            base.InitializeCulture();
        }
    }

e incluir esto en el web.config

<globalization requestEncoding="utf-8" responseEncoding="utf-8" uiCulture="en-US" culture="en-US"/>

y esto en la cabecera del archivo .aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Culture="en-US" UICulture="en-US"

Una vez más, esto es sólo en la carga inicial después de compilar el código, cuando esa página se carga por primera. Otras páginas Web Forms no se ven afectados, aunque descienden de System.Web.Mvc.ViewPage. Todas las cargas posteriores tratan la cultura correctamente. Simplemente cambiar el archivo .aspx no causa esto, el código C # ha de ser compilado para causar esto.

Más datos: Tengo que rastreó al método Render. Antes de que el método Render, el cultivo se en-US y después es en-GB (de nuevo sólo en pageload inicial después de la compilación).

¿Fue útil?

Solución 2

Esto resultó ser causada por una una dependencia de un fuera de fecha, .dll tercera parte. Una vez que lo rastreó, y obtuve la versión actualizada .dll, todo estaba bien otra vez.

Otros consejos

En su opinión, intente crear una vista base - a continuación, para que hereda la visión particular de ella como se ha hecho aquí: Cómo globalizar vistas ASP.NET MVC (separadores decimales en particular)? Sin embargo la suya sería más como:

protected override void InitializeCulture()
{
    base.InitializeCulture();
    CultureInfo cultureInfo = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = cultureInfo;
}

Creo que ha habido algunos problemas con la clave de la globalización funcione correctamente.

¿Cómo se ha establecido la cultura en el web.config?

está usando la tecla "globalización"?

echar un vistazo a:

http://msdn.microsoft.com/en-us/library/ bz9tc508.aspx

Mi primera observación de su página .aspx,

Usted no está heredando su página ASPX de la clase ViewPage base. Trate de añadir esto a su etiqueta de cabecera de la página ASPX.

Inherits="XXX.Views.DNViewPage<YYY.Models.zzzViewModel>"

por lo que debe tener este aspecto:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="XXX.Views.DNViewPage<YYY.Models.zzzViewModel>" %>

¿Usted ha intentado hacer un controlador de base? He cambiado la cultura con una aplicación en el trabajo a funcionó bastante bien.

public class BaseController : Controller
{
    public string ActionName;
    public string ControllerName;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //Switch the language in here?
       CultureInfo cultureInfo = new CultureInfo("en-US");
        this.Culture = "en-US";
        this.UICulture = "en-US";
        Thread.CurrentThread.CurrentUICulture = cultureInfo;
        Thread.CurrentThread.CurrentCulture = cultureInfo;

        base.OnActionExecuting(context);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top