Frage

Ich habe ein Hybrid ASP.Net Web-Formulare / MVC-app. Auf einen der MVC „Seiten“ / Ansichten, ich habe es ein paar Tage, macht das ToShortDateString mit () und ToLongDateString (). Diese Arbeit richtig die meiste Zeit, aber das erste Mal, dass ich die Ansicht laden, nachdem die App kompilieren, sind sie falsch formatiert.

verfolgt ich diesen nach unten und überprüft die Kultur des aktuellen Threads. Für 99% der Zeit ist es en-US, aber auf der ersten Last der MVC Ansicht nach dem Kompilieren es wird auf en-GB. Wenn ich die Seite unmittelbar danach neu zu laden, es ist wieder auf en-US.

Ich habe versucht, die Kultur und Uiculture in der Datei web.config Einstellung en-US sie zu zwingen, um korrekt zu sein, aber kein Glück.

Wer irgendwelche Ideen auf diesem? Bug in MVC?

Edit (Zusatzcode und Versuche): Auch wenn ich völlig über Bord und nimmt diese in der Basisklasse der Ansicht gehen

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

und fügen Sie diese in der web.config

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

und diese in der Kopfzeile der ASPX-Datei

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

Auch dies ist nur auf der Anfangslast nach Kompilieren des Codes, wenn die Seite zum ersten Mal geladen. Andere Web-Formulare Seiten sind davon nicht betroffen, auch wenn sie von System.Web.Mvc.ViewPage absteigen. Alle nachfolgenden Lasten behandeln richtig die Kultur. Nur die Änderung der ASPX-Datei Ursache dies nicht, hat sich die c # Code kompiliert werden, um dies zu bewirken.

Weitere Daten: Ich habe es mit der Render-Methode aufgespürt. Vor der Render-Methode, ist die Kultur en-US und danach ist es en-GB (wieder nur bei dem ersten Pageload nach der Kompilierung).

War es hilfreich?

Lösung 2

Dies erwies sich durch eine eine Abhängigkeit von einem veralten, Dritten .dll verursacht werden. Sobald ich es aufgespürt und bekam .dll die aktualisierte, war alles wieder gut.

Andere Tipps

Ihrer Ansicht nach versuchen, eine Basisansicht zu schaffen - dann für diese bestimmte Ansicht, vererben sie wie hier geschehen: Wie ASP.NET MVC-Ansichten (Dezimaltrennzeichen insbesondere)? globalisieren jedoch würden Sie mehr wie:

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

Ich glaube, es haben einige Probleme gewesen mit der Globalisierung Schlüssel richtig funktioniert.

Wie haben Sie die Kultur in die Web-Config eingestellt?

verwenden Sie die "Globalisierung" Schlüssel?

hat einen Blick auf:

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

Meine erste Beobachtung für Ihre ASPX-Seite,

Sie erben nicht Ihre ASPX-Seite von der Basis View Klasse. Versuchen Sie, diese zu Ihrem ASPX-Seite Header-Tag.

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

, so dass es so aussehen sollte,

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

Haben Sie versucht, einen Basis-Controller zu machen? Ich habe geändert Kultur mit einer App bei der Arbeit an, es ist ziemlich gut funktioniert.

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top