[英]masterpage initializeculture no suitable method found to override error?
[英]how to pass the selected culture into InitializeCulture() method
我有一個登錄頁面,用戶可以通過單選按鈕選擇其語言,登錄后,用戶將被重定向到Default.aspx,在這里我使用以下方法設置頁面區域性:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>
<%@ Import Namespace="System.Resources" %>
<% @Import Namespace="System.Globalization" %>
<% @Import Namespace="System.Threading" %>
<script runat=server>
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["lang"].ToString());
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["lang"].ToString());
base.InitializeCulture();
}
</script>
如何將所選語言從登錄頁面傳遞到Default.aspx頁面的此方法? 我試圖通過會話傳遞它,但出現此錯誤:
System.NullReferenceException:'對象引用未設置為對象的實例。 System.Web.SessionState.HttpSessionState.this [string] .get返回null。
因為此方法發生在啟動任何控件或會話之前的早期,所以這就是它返回null的原因。 知道如何將所選區域性傳遞給該方法嗎?
在您的代碼中,“ lang”加載到Session中的什么位置?
我相信這是在告訴您SessionState中不存在“ lang”,而SessionState本身不可用。
您是將其設置為默認值還是允許用戶選擇它?
如果是前者,則將其放在您的App.xaml.cs中:
[assembly: NeutralResourcesLanguage("en-US")]
如果您擔心線程文化,也可以執行以下操作:
var culture = CultureInfo.CreateSpecificCulture("en-US");
if (Thread.CurrentThread.CurrentCulture.Name != "en-US")
{
var culture = CultureInfo.CreateSpecificCulture("en-US");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
<%@ Page Language="C#" uiculture="auto" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Globalization" %> <script runat="server"> protected override void InitializeCulture() { if (Request.Form["ListBox1"] != null) { String selectedLanguage = Request.Form["ListBox1"]; UICulture = selectedLanguage ; Culture = selectedLanguage ; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); } base.InitializeCulture(); } </script>
我找到了答案,我設法使用查詢字符串傳遞了選定的文化信息:
在我的登錄頁面中,我有兩個單選按鈕和一個按鈕:
<asp:RadioButton ID="RadioButton1" runat="server" Text="ar-AE" />
<asp:RadioButton ID="RadioButton2" runat="server" Text="en-US" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
在按鈕OnClick后面的代碼中:
protected void Button1_Click(object sender, EventArgs e)
{
if (RadioButton1.Checked)
{
Response.Redirect("Default.aspx?language=" + RadioButton1.Text);
}
else
{
Response.Redirect("Default.aspx?language=" + RadioButton2.Text);
}
}
然后在Default.aspx頁面中,我有以下代碼:
<% @Import Namespace="System.Resources" %>
<% @Import Namespace="System.Globalization" %>
<% @Import Namespace="System.Threading" %>
<script runat=server>
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.QueryString["language"].ToString());
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.QueryString["language"].ToString());
base.InitializeCulture();
}
</script>
我也嘗試使用Cookie,但它也像會話一樣返回null,因此查詢字符串是唯一對我有用的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.