このエラーは私にナットをもたらしています。 複数の言語に変更するオプションのあるウェブサイトを構築する。.NET:Culture Infosを適用するとNullReferenceExceptionが発生する
相続人は、サイトの(非常に)基本構造:(分離コード-ファイル付き)
Default.aspxを(CodeBehinde-ファイル付き)
共有/ Default.Master
にApp_Code/BasePage.cs
App_LocalResources/Default.aspx.en.resx
Default.aspxは、マスターページを使用します。
BasePage.cs:System.Web.Ui.PageからBasePageクラスクラス誘導体(パブリッククラスBasePageクラス:ページ)
Default.aspx.cs:BasePageクラスからデフォルト誘導体(パブリック部分クラスのデフォルト:BasePageクラス)
すべてそれはうまくいく。
次に、InitializeCulture()メソッドをオーバーライドして、サイトの言語を変更できるようにしました。 文化は2文字の形式にする必要があります( "en"は "en-US"などではありません)。
これはBasePage.cssファイルがどのように見えるかです:私は、ページを開いたときに
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Web.UI;
using System.Threading;
using System.Globalization;
namespace Web
{
public class BasePage : Page
{
protected override void InitializeCulture()
{
LanguageQS = Request.QueryString["l"].ToString();
// Language
if(!String.IsNullOrEmpty(LanguageQS))
{
// Validate the QueryString Value
string[] LanguagesArray = ConfigurationManager.AppSettings["Languages"].ToString().Split(',');
if(LanguagesArray.Contains(LanguageQS))
{
Session["Language"] = LanguageQS;
cultureString = LanguageQS;
}
}
else if(Session.IsNewSession || String.IsNullOrEmpty(Session["Language"].ToString()))
{
// New Session, set default Language
cultureString = ConfigurationManager.AppSettings["DefaultLanguage"].ToString();
}
else
{
// Get language from session
cultureString = Session["Language"].ToString();
}
// Set the language
try
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureString);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureString);
}
catch { throw; }
base.InitializeCulture();
}
private string _culture;
public string cultureString
{
set { this._culture = value; }
get { return this._culture; }
}
private string _languageQS;
public string LanguageQS
{
set { this._languageQS = value; }
get { return this._languageQS; }
}
}
}
今、私は次のエラーを取得する:
Line 1: <%@ Page Language="C#" MasterPageFile="~/Shared/Default.Master" Inherits="Default" meta:resourcekey="PageResource" Codebehind="Default.aspx.cs" AutoEventWireup="True" %>
System.NullReferenceException: Object reference not set to an instance of an object.
私がトレース次の2行のエラー:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureString);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureString);
私がそれらを取り除くと、すべてうまく機能します。
しかし、私は右の私がNullExceptionことを得るそれらの行の前に
cultureString = "en";
または
cultureString = "en-US";
を入れていても。
誰かがヒントを得ましたか?
このエラーを引き起こすものは、.NET開発とカントではかなり新しいです。コードの下に私のために
デバッガを使用せずに、多くの推測とテストに限定されます。 – tenfour