国際化されたサイトにアクセスした人が言語を変更できるようにしたい. 選択した言語を Cookie に保存するのが最善の方法だと思いました。そのため、ページが読み込まれると、Cookie で優先言語を検索できます。
クッキーの書き込みは完璧に進んでいますが、読み取ろうとするとエラーが発生し続けます。私は C# を初めて使用するので、Visual Studio がスローするエラーを翻訳するのに苦労しています。
lang という文字列で「UserSettings」という Cookie の値が必要です。私はこのようにしようとしています:
string lang = Request.Cookies["UserSettings"].Value;
スローされるエラーは次のとおりです。
オブジェクト参照がオブジェクト インスタンスに設定されていません
左側の文字列を初期化しているので、問題はステートメントの右側にあるはずだと考えています。
また、次のようにしてCookieのインスタンスを作成してみました
HttpCookie cookie = Request.Cookies["UserSettings"].Value;
しかし、ビジュアルスタジオはこれをまったく好きではありません。
私は何を間違っていますか?Request オブジェクトのインスタンスを作成する必要がありますか? どんな助けでも大歓迎です。
このトピックに関するさまざまなチュートリアルに従っていますが、すべて同じエラーが発生します。
編集:私は私が持っていることに気づきました
HttpCookie cookie = Request.Cookies["UserSettings"].Value;
私はそれを次のように変更しました:
HttpCookie cookie = Request.Cookies["UserSettings"];
運が悪い、それはまだうまくいきませんでした。
編集:これが私のクッキーの作り方です
public void Application_BeginRequest()
{
myCookie = new HttpCookie("UserSettings");
myCookie.Value = "nl";
myCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(myCookie);
hc = new HomeController();
}
私の Cookie は 100% そこにあります。Firefox の Web 開発者で見ることができます。
更新:これは私が今呼んでいる正確なコードです
public string getLang()
{
// HttpCookie aCookie = Request.Cookies["UserSettings"];
// string lang = Server.HtmlEncode(aCookie.Value);
// if (lang != null)
// {
// currentLanguage = lang;
// }
return currentLanguage;
}
この方法でコードがコンパイルされ、コードのコメントを外すと、ドットが消えます(このメソッドの最初の行でエラーが発生します)