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 对象是否为空,你应该使用(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"]不是空的?

您应该添加另一个短路或检查(Session["myIndex"] == null)并摆脱(Session["myIndex"]).Equals(null).

于 2010-05-05T10:18:25.923 回答
1

对象引用错误可能是因为 (Session["myIndex"]) 为空,

(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 回答