3

ハイブリッド 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 です (コンパイル後の最初のページロード時のみ)。

4

5 に答える 5

1

これは、古いサードパーティの .dll への依存が原因であることが判明しました。それを追跡し、更新された.dllを取得すると、すべてが再び良好になりました.

于 2011-05-16T23:04:08.517 に答える
1

ビューで、ベース ビューを作成してみてください。次に、その特定のビューに対して、次のようにそれを継承します: ASP.NET MVC ビューをグローバル化する方法 (特に小数点区切り記号)? ただし、あなたのものは次のようになります。

保護されたオーバーライド void InitializeCulture()
{
    base.InitializeCulture();
    CultureInfo cultureInfo = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = cultureInfo;
}

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

于 2011-05-15T03:22:28.133 に答える
0

ベースコントローラーを作ってみましたか?私はアプリを使って文化を変えましたが、それはかなりうまくいきました。

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);
    }
}
于 2011-05-15T19:27:12.383 に答える
0

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

基本 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>" %>
于 2011-05-16T01:12:29.950 に答える
0

カルチャを Web 構成にどのように設定しましたか?

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

見て:

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

于 2010-11-04T09:55:43.907 に答える