2011-02-02 49 views
4

我想以編程方式設置我的用戶控件定義幾個標籤,按鈕和文本框的文化設置文化的用戶控件的...編程在ASP.NET

通常情況下,你重寫的aspx的頁面InitializeCulture-Method並設置Culture和UICulture來達到這個目的,但是ASCX-Controls沒有這個方法,那麼我該怎麼做呢?

我設置了本地資源mycontrol.ascx.de-DE.resx,mycontrol.ascx.resx和mycontrol.ascx.en-GB.resx,但只設置了默認文件(mycontrol.ascx。 resx)被使用。

在此先感謝。

丹尼斯

回答

5

當前培養是線程寬:Page.CulturePage.UICulture實際設置Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture引擎蓋下。

如果在您的頁面標記中定義了用戶控件,我不認爲您可以做任何事情。如果您有LoadControl()加載它,你可以暫時調用之前重寫當前線程的文化和事後恢復它,但它會很尷尬:

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Some code... 

    CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture; 
    CultureInfo oldUICulture = Thread.CurrentThread.CurrentUICulture; 
    Thread.CurrentThread.CurrentCulture = yourNewCulture; 
    Thread.CurrentThread.CurrentUICulture = yourNewUICulture; 

    try { 
     Controls.Add(LoadControl("yourUserControl.ascx")); 
    } finally { 
     Thread.CurrentThread.CurrentCulture = oldCulture; 
     Thread.CurrentThread.CurrentUICulture = oldUICulture; 
    } 

    // Some other code... 
} 
+0

感謝您的回答 - 只是爲了澄清:我通過LoadControl將文化加載到已重寫InitializeCulture的aspx頁面上,但不幸的是,我的用戶控件仍然沒有收到已在其出現的aspx頁面上設置的文化in。 – 2011-02-02 16:01:37

+0

@Dennis,`InitializeCulture()`在頁面生命週期的早期階段被調用,因此在加載用戶控件時應該設置所有值。你在哪個階段加載它? – 2011-02-02 16:04:24

2

我用下面的代碼更改asp.net語言MVC在我的項目頁面

public ActionResult ChangeCulture (Culture lang, string returnUrl) 
    { 
     if (returnUrl.Length> = 3) 
     { 
      returnUrl = returnUrl.Substring (3); 
     } 
     return redirect ("/" + lang.ToString() + returnUrl); 
    } 

也是我用同樣的page.when我改變了與ActionLink的語言用戶控件(ASCX)被改變的ViewPage語言,但是用戶控件頁面加載事件不會捕捉變化如此的ViewPage的語言變化,但用戶控件的語言不變

7

我也在這個問題上花了幾個小時,終於得到了這個解決方案。 你只需要重寫FrameworkInitialize()而不是initilizeculture(), 如:

protected override void FrameworkInitialize() 
{ 
    String selectedLanguage = LanguageID; 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 

    base.FrameworkInitialize(); 
} 

物權法將這個代碼的ascx.cs文件中,此覆蓋功能並不需要被調用。