Laden...

ASP.Net MVC Kultur setzen

Erstellt von itstata vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.225 Views
I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren
ASP.Net MVC Kultur setzen

Hallo,
ich würde gerne in meiner MVC-Applikationi die Kultur setzen und zwar soll dazu eine Drop-Down-Liste auf der Masterpage liegen die eine Action aufruft (SetLanguage oder sowas). In der Session soll dann die ausgewählte Kultur z.B. als ID abgespeichert werden.

Mein erstes Vorgehen war alle Controller von einer Elterklasse ("ApplicationController") abzuleiten und dort die Methode SetLanguage abzulegen. Ist das hier das richtige Vorgehen?

Ich müsste nachdem ich die Kultur gesetzt habe den Controller von dem der Aufruf ausging neuladen. Leider ist ja meine Action im Eltern-element 😃. Als Workaround hab ich hier die letzte URL gespeichert. Für wirkt das irgendwie zu kompliziert. Hat jemand soetwas schon einfacher umgesetzt?

MasterPage


   <%-- Spracheinstellung --%>
                <label for="Culture">
                    Sprache:</label>
                <%= Html.DropDownList("Cultures", (SelectList)ViewData["Cultures"], new { onchange = "setCulture(\"" + Html.Route(ViewContext.Controller) + "\")"  // Html.Route -> gibt die momentane Route zurück})%>


function setCulture(routeLink) {
    $.getJSON("/Application/SetCulture/", { cultureID: $("#" + culture).val() }, null);
    window.location.reload();
}

ApplicationController:


 protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            InitCulture();
            base.OnActionExecuting(filterContext);
        }

        /// <summary>
        /// Liefert eine Liste der Kultureinstellungen
        /// </summary>
        public void InitCulture()
        {
            String selectedItem = String.Empty;
            List<CultureItem> cultures = Culture.Cultures;

            if (Session != null && Session[Defines.CultureSN] != null)
            {
                String cultureID = Session[Defines.CultureSN] as String;
                SelectListItem selectedCultureItem = cultures.Where(c => c.Value.Equals(cultureID)).First();
                selectedCultureItem.Selected = true;
            }
            ViewData["Cultures"] = new SelectList(cultures, "Value", "Text");
        }

        /// <summary>
        /// Setzt die Kultur für den aktuellen Thread und speichert die Kultur in der Session.
        /// </summary>
        public void SetCulture(String cultureID)
        {
            int id = -1;
            try
            {
                id = Int32.Parse(cultureID);
            }
            catch
            {
             return;
            }

            CultureItem culture = Culture.GetCultureById(id);

            //Kultur setzen
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture.Culture);
            System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture.Culture);
            //und in Session speichern
            Session[Defines.CultureSN] = culture.Value;
        }

    }