我需要使用引用会话变量的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)
捕获此特定错误吗?
答案 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,您可以避免崩溃并执行其他操作。