Domanda

Ho un ibrido ASP.Net moduli web/applicazione MVC.Su uno dei MVC "pagine"/vista, ho il rendering di un mucchio di date utilizzando il ToShortDateString() e ToLongDateString().Questi funzionano correttamente la maggior parte del tempo, ma la prima volta che carico la vista dopo aver compilato l'applicazione, essi sono formattati in modo non corretto.

Ho rintracciato questo in giù e controllato il thread corrente della cultura.Per il 99% del tempo è en-US, ma il primo carico di MVC vista dopo la compilazione è en-GB.Se mi ricarica la pagina, subito dopo, si torna a en-US.

Ho provato impostando la cultura e uiculture nel web.config file en-US per forza essere corretto, ma senza fortuna.

Qualcuno ha idee su questo?Bug in MVC?

Edit (codice aggiuntivo e tentativi):Anche se io vado completamente in mare e la classe di base di 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 il web.config

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

e questo nell'intestazione del .file aspx

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

Di nuovo, questo è solo il carico iniziale, dopo la compilazione del codice, quando la pagina si carica.Altre pagine web form sono interessati, anche se essi discendono dal Sistema.Web.Mvc.ViewPage.Tutti i successivi carichi di trattare la cultura correttamente.Cambiando solo il .file aspx, non la causa di questo, il codice c# deve essere compilato a causa di questo.

Ulteriori dati:Ho rintracciato il metodo di Rendering.Prima il metodo di Rendering, la cultura è en-US e poi è en-GB (solo iniziale pageload dopo la compilazione).

È stato utile?

Soluzione 2

Questo si è rivelato essere causato da una dipendenza su una data di terze parti .dll.Una volta ho rintracciato giù, e ha ricevuto un aggiornamento .dll, tutto è di nuovo bene.

Altri suggerimenti

Nel vostro punto di vista, provare a creare una vista di base - quindi per quella particolare prospettiva di ereditare da essa come fatto qui: Come globalizzare ASP.NET MVC vista (separatori decimali in particolare)? tuttavia, la vostra sarebbe più simile a:

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

Io credo che ci sono stati alcuni problemi con la globalizzazione il lavoro correttamente.

come hai impostato la cultura nel web config ?

stai usando la "globalizzazione" chiave ?

date un'occhiata a:

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

La mia prima osservazione per il tuo .pagina aspx,

Non si eredita la tua pagina ASPX da base ViewPage classe.Prova ad aggiungere questo alla tua pagina ASPX tag di intestazione.

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

così dovrebbe assomigliare a questo,

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

Hai provato a fare un controller di base?Ho cambiato la cultura con l'app di lavoro, ha funzionato abbastanza bene.

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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top