ハイブリッド ASP.Net Web フォーム/MVC アプリを使用しています。MVC の「ページ」/ビューの 1 つで、ToShortDateString() と ToLongDateString() を使用して一連の日付をレンダリングします。これらはほとんどの場合正しく機能しますが、アプリのコンパイル後に初めてビューをロードすると、フォーマットが正しくありません。
これをたどり、現在のスレッドの文化を確認しました。99% の時間は en-US ですが、コンパイル後の MVC ビューの最初の読み込みでは en-GB に設定されます。その直後にページをリロードすると、en-US に戻ります。
web.config ファイルのカルチャと uiculture を en-US に設定して強制的に正しいものにしようとしましたが、うまくいきませんでした。
誰でもこれについて何か考えがありますか?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 から派生したものであっても、他の Web フォーム ページは影響を受けません。以降のすべての読み込みでは、カルチャが正しく処理されます。.aspx ファイルを変更するだけでは、これは発生しません。これを発生させるには、C# コードをコンパイルする必要があります。
詳細データ: Render メソッドまで追跡しました。Render メソッドの前では、カルチャは en-US であり、その後は en-GB です (コンパイル後の最初のページロード時のみ)。