Question

J'ai des formulaires Web ASP.Net hybrides / app MVC. Sur l'un des MVC « pages » / vues, je l'ai rendu un tas de dates à l'aide du ToShortDateString () et ToLongDateString (). Ces travaux correctement la plupart du temps, mais la première fois que je charge la vue après la compilation de l'application, ils ne sont pas correctement formatés.

Je remonte cette baisse et vérifié la culture du thread courant. Pour 99% du temps, il est en États-Unis, mais la première charge de la vue MVC après la compilation, il est mis à en-GB. Si je recharge la page immédiatement après, il est de retour à en-US.

Je l'ai essayé de placer la culture et uiculture dans le fichier web.config à en-US pour le forcer à être correct, mais pas de chance.

Tout le monde a des idées sur celui-ci? Bug dans MVC?

Edit (code additionnel et tentatives): Même si je vais complètement par-dessus bord et inclure dans la classe de base de la vue

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

et inclure dans le web.config

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

et cela dans l'en-tête du fichier .aspx

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

Encore une fois, ce n'est que la charge initiale après la compilation du code, lorsque cette page premières charges. D'autres formes Web pages ne sont pas affectés, même si elles descendent de System.Web.Mvc.ViewPage. Toutes les charges suivantes traitent correctement la culture. Il suffit de modifier le fichier .aspx ne provoque pas cela, le code c # doit être compilé pour faire cela.

Plus de données: Je l'ai suivi jusqu'à la méthode de rendu. Avant la méthode de rendu, la culture est en États-Unis et par la suite il est en-GB (à nouveau uniquement sur pageload initiale après compilation).

Était-ce utile?

La solution 2

avéré être causé par une dépendance à une sortie de ce jour, .dll tiers. Une fois que je dépisté vers le bas, et a obtenu le .dll mis à jour, tout était bon à nouveau.

Autres conseils

Ma première observation de votre page .aspx,

Vous n'êtes pas héritez votre page ASPX de la classe de base ViewPage. Essayez d'ajouter ceci à votre balise d'en-tête de la page ASPX.

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

il devrait donc ressembler à ceci,

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

Avez-vous essayé de faire un contrôleur de base? J'ai changé la culture avec une application au travail à cela fonctionnait assez 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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top