5

セッション変数を参照するac#リテラルを使用して、Javascriptの値を初期化する必要があります。私は次のコードを使用しています

<script type="text/javascript" language="javascript" > 
    var myIndex = <%= !((Session["myIndex"]).Equals(null)||(Session["myIndex"]).Equals("")) ? Session["backgroundIndex"] : "1" %>;

ただし、上記のコードは私に古典的なObject reference not set to an instance of an object.エラーを与えています。なんで?(Session["myIndex"]).Equals(null)この特定のエラーをキャプチャするべきではありませんか?

4

5 に答える 5

3

問題は、それnullがオブジェクトではなく、Equals()メソッドがオブジェクトでしか使用できないことです。Session オブジェクトが null かどうかを確認したい場合は、 を使用する必要があります(Session["myIndex"] == null)string.IsNullOrEmpty()空の文字列の追加チェックにも使用できます。その場合、コードは次のようになります。

var myIndex = <%= !string.IsNullOrEmpty((string)Session["myIndex"]) ? Session["backgroundIndex"] : "1" %>;

注:この場合はすべきではありませSession["backgroundIndex"]Session["myIndex"]か?それ以外の場合、null または空の文字列のチェックは、私の意見では少し役に立ちません。

于 2010-05-05T10:26:18.620 に答える
1

本当にSession["myIndex"]null ではありませんか?

別の短絡ORチェックを追加して(Session["myIndex"] == null)、を取り除く必要があり(Session["myIndex"]).Equals(null)ます。

于 2010-05-05T10:18:25.923 に答える
1

オブジェクト参照エラーは、(Session["myIndex"]) が null である可能性があります。

(Session["myIndex"]).Equals は値の比較に使用されるため、(Session["myIndex"]).Equals("yourIndex") のように比較したい場合に使用できます。

于 2010-05-05T10:19:04.470 に答える
0

これはうまくいきます(私はそれをテストしました!):

var myIndex = <%=!string.IsNullOrEmpty( (string)Session["myIndex"] ) ? Session["myIndex"] : "1" %> ;
于 2010-05-05T11:47:49.483 に答える
-3

分離コードで、保護された変数を作成し、そこで初期化します。主な利点は、そこでデバッグできることです。さらに、try catch を使用できます。

コードビハインド

protected string sessionValue;
private void Page_Load(...)
{
try
{
sessionValue = Session["key"].ToString();
}
catch
{
sessionValue = [defaultValue];
}
}

JavaScript:

<script>
var sessionValue = "<%= sessionValue %>";
</script>

このようにして、クラッシュを回避し、sessionValue が null であるか、defaultValue がある場合に別のことを行うことができます。

于 2010-05-05T10:25:20.590 に答える