эта ошибка приводит меня в бешенство. Im создает веб-сайт с возможностью изменения между несколькими языками.. NET: исключение NullReference при применении информации о культуре
Heres (очень) базовая структура сайта:
Default.aspx (с CodeBehind-File)
Общие/Default.Master (с CodeBehinde-File)
App_Code/BasePage.cs
App_LocalResources/Default.aspx.en.resx
Default.aspx использует Masterpage.
BasePage.cs: Класс BasePage дериваты от System.Web.UI.Page (класс BasePage общественности: Page)
Default.aspx.cs: По умолчанию дериваты от BasePage (общественный частичный класс по умолчанию: BasePage)
Все это хорошо работает.
Затем я попытался переопределить метод InitializeCulture(), чтобы можно было изменить язык сайта. Культура должна быть в двухбуквенном виде (так что «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.
I прослежен ошибка до этих двух строк:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureString);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureString);
Если я удалю их, все будет хорошо работать.
Но даже если я ставлю
cultureString = "en";
или
cultureString = "en-US";
прямо перед этими линиями я понимаю, что NullException.
Кто-нибудь получил подсказку?
Я очень новичок в .NET-разработке и не могу найти причину этой ошибки.
вам нужно использовать отладчик и посмотреть, когда произойдет ошибка. Без использования отладчика вы будете ограничены множеством угадываний и испытаний. – tenfour 2010-11-28 11:48:57