ASP.NET MVC Коммутационные культуры после компиляции для начальной нагрузки

StackOverflow https://stackoverflow.com/questions/4091602

Вопрос

У меня есть Hybrid ASP.NET Web Forms / MVC приложение. На одном из MVC «страницы» / просмотров у меня есть куча датов, используя ToshortDateString () и TolongdateString (). Они работают правильно большую часть времени, но в первый раз я загружаю вид после составления приложения, они отформатированы неправильно.

Я проследил это и проверил культуру текущей нити. В течение 99% времени это США, но на первой нагрузке MVC View после составления его установлено значение EN-GB. Если я перезагрузим страницу сразу после этого, вернулась к нам.

Я попытался установить культуру и заборку в файле web.config, чтобы сделать его, чтобы заставить его быть правильным, но не повезло.

У кого-нибудь есть идеи на этом? Ошибка в MVC?

Редактировать (дополнительный код и попытки): Даже если я пойду полностью за борт и включите это в базовый класс вида

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

и включить это в web.config

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

И это в заголовке файла .aspx

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

Опять же, это только на начальной нагрузке после составления кода, когда эта страница первая нагрузка. Другие страницы веб-форм не затронуты, даже если они спускаются от System.Web.mvc.viewpage. Все последующие нагрузки правильно относятся к культуре. Просто изменение файла .aspx не вызывает этого, код C # должен быть скомпилирован, чтобы вызвать это.

Дополнительные данные: у меня он отслеживается до метода рендера. Перед методом Render культуру - это США и впоследствии она EN-GB (опять же только на начальной нагрузке после компиляции).

Это было полезно?

Решение 2

Это оказалось вызвано зависимостью от устаревшего, третьей стороной .dll. Как только я отслеживал его, и получил обновленный .dll, все было хорошо снова.

Другие советы

По вашему мнению, попробуйте создать базовый вид - затем для этого конкретного представления наследует от него, как это сделано здесь: Как глобализировать виды ASP.NET MVC (в частности, десятичные сепараторы)?Однако ваши бы больше похоже на:

защищенное переопределение void инициализирует () {base.initializeculture (); CultureInfo CultureInfo = New CultureInfo («EN-US»); Thread.CurrentThread.Currenturecture = CultureInfo; }

Я считаю, что были некоторые проблемы с ключом глобализации работают правильно.

Как вы установили культуру в веб-конфигурацию?

Вы используете ключ «Глобализацию»?

посмотри на:

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

Мое первое наблюдение за вашу страницу .aspx,

Вы не наследуете свою страницу ASPX из базового класса Viewpage. Попробуйте добавить это в тег заголовка страницы ASPX.

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

так что это должно выглядеть так,

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

Вы пытались сделать базовый контроллер? Я изменил культуру с приложением на работе на нем довольно хорошо.

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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top