2

あなたのためのクイックシナリオ。

私のページでは、次のようなクエリ文字列を使用して、値がクリアされた場合にセッション変数に値を復元しようとしました。

if(Session["species"] == null || Session["species"] == "")
{
    Session["species"] = Request["species"];
}

さらに下に、このセッション変数の値に基づいて、他の2つのセッション変数のいずれかの値を次のように設定します。

if((string)Session["species"]=="Canine")
{
    Session["dBreed"] = Request.Form["breed"].Trim();
}
else if((string)Session["species"]=="Feline")
{
    Session["cBreed"] = Request.Form["breed"].Trim();
}

ただし、セッションがタイムアウトした後(20分後)、このエラーが発生するようです。

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 134:            errorMessage = "The data received from the \"Age\" field was invalid.";
Line 135:        }
Line 136:        if(((string)Session["dBreed"]).Length > 50)
Line 137:        {
Line 138:            errorMessage = "The data received from the \"Breed\" field was invalid.";

Source File: c:\Users\cradebaugh\Documents\My Web Sites\Vaccinations\InputEntry.cshtml    

(ERRORS ON):  Line: 136 

明らかに、何が起こったのかを理解しています(Session ["dBreed"]の値が割り当てられなかったこと、つまり、Session["species"]変数がクリアされた後に再割り当てされなかったことを意味します。

私の質問は次のとおりです。(Request ["species"]を使用して)クエリ文字列を要求しようとすると、一定の時間が経過した後のページでのみ有効ですか、それとも他の何かがまったく発生していませんか?

URLでクエリ文字列を物理的に確認できますが、セッションがタイムアウトするまでに、要求している値は存在しなくなっているようです。

すでに非表示の入力フィールドを使用して上記と同じ目標を達成することを計画していますが、将来再び使用する前に、この方法でクエリ文字列を使用する性質を理解するのが最善だと思いました。

お時間をいただき、ありがとうございました。

4

1 に答える 1

2

... Session ["dBreed"]の値が割り当てられることはありませんでした。つまり、Session["species"]変数が再割り当てされることはありませんでした...

または、Session["species"]に設定されていること"Feline"。2番目のコードブロックを見てください:

else if((string)Session["species"]=="Feline")
{
    Session["cBreed"] = Request.Form["breed"].Trim();
}

種がの場合、ではなく"Feline"、を割り当てます。Session["cBreed"]Session["dBreed"]

于 2012-12-13T16:20:48.243 に答える