通过Session变量初始化值

时间:2010-05-05 10:15:33

标签: c# asp.net javascript literals

我需要使用引用会话变量的c#literal在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)捕获此特定错误吗?

5 个答案:

答案 0 :(得分:3)

问题是null不是对象,Equals()方法只能用于对象。如果要检查Session对象是否为空,则应使用(Session["myIndex"] == null)。您还可以使用string.IsNullOrEmpty()对空字符串进行额外检查。在这种情况下,您的代码应为:

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

注意:在这种情况下,Session["backgroundIndex"]不应该是Session["myIndex"]吗?否则,在我看来,null或空字符串检查有点无用。

答案 1 :(得分:1)

您确定Session["myIndex"]不为空吗?

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

答案 2 :(得分:1)

对象引用错误可能是因为(Session [“myIndex”])为null,

(Session [“myIndex”])。Equals用于比较值,因此您可以使用它想要比较的(Session [“myIndex”])。Equals(“yourIndex”)

答案 3 :(得分:0)

这样可行(我已经测试过了!):

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

答案 4 :(得分:-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,您可以避免崩溃并执行其他操作。