質問

ハイブリッド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"

繰り返しますが、これは、そのページが最初にロードされたときに、コードをコンパイルした後の初期負荷のみです。他のWebフォームページは、システムから下降しても影響を受けません。Web.MVC.ViewPage。後続のすべての負荷は、培養を正しく扱います。 .aspxファイルを変更するだけでは、これを引き起こすことはありません。これを引き起こすためにC#コードをコンパイルする必要があります。

その他のデータ:レンダリング方法まで追跡しています。レンダリング方法の前に、文化はEN-USであり、その後はEN-GBです(再びコンピレーション後の最初のページロードでのみ)。

役に立ちましたか?

解決 2

これは、時代遅れの第三者.dllへの依存によって引き起こされることが判明しました。追跡して、更新された.dllを取得したら、すべてが再び良かったです。

他のヒント

あなたのビューでは、ベースビューを作成してみてください - その特定のビューのために、ここで行われたように継承してください。 ASP.NET MVCビューをグローバル化する方法(特に小数分層)は?しかし、あなたのものは次のようになります:

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

グローバリゼーションキーが正しく機能することにいくつかの問題があったと思います。

文化をどのようにWeb構成に設定しましたか?

「グローバリゼーション」キーを使用していますか?

見て:

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

あなたの.aspxページに対する私の最初の観察、

Base ViewPageクラスからASPXページを継承しているわけではありません。これを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