Инициализация значения через переменную Session - PullRequest
5 голосов
/ 05 мая 2010

Мне нужно инициализировать значение в Javascript с помощью литерала c #, который ссылается на переменную сеанса. Я использую следующий код

<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 ]

3 голосов
/ 05 мая 2010

Проблема в том, что null не является объектом, а метод Equals() может использоваться только для объектов. Если вы хотите проверить, является ли ваш объект сеанса пустым, вы должны использовать (Session["myIndex"] == null). Вы также можете использовать string.IsNullOrEmpty() для дополнительной проверки пустых строк. В этом случае ваш код должен быть:

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

Примечание: Не должно ли Session["backgroundIndex"] быть Session["myIndex"] в этом случае? В противном случае проверка на пустую или пустую строку, на мой взгляд, немного бесполезна.

1 голос
/ 05 мая 2010

Ошибка ссылки на объект может быть из-за того, что (Session ["myIndex"]) имеет значение null,

(Session ["myIndex"]). Равенство используется для сравнения значений, поэтому вы можете использовать его для сравнения (Session ["myIndex"]). Equals ("yourIndex")

1 голос
/ 05 мая 2010

Вы уверены, что Session["myIndex"] не равно нулю?

Вы должны добавить еще одно короткое замыкание ИЛИ проверить на (Session["myIndex"] == null) и избавиться от (Session["myIndex"]).Equals(null).

0 голосов
/ 05 мая 2010

Это будет работать (я проверял это!):

var myIndex = <%=!string.IsNullOrEmpty( (string)Session["myIndex"] ) ? Session["myIndex"] : "1" %> ;
0 голосов
/ 05 мая 2010

в коде позади создайте защищенную переменную и инициализируйте ее там. Основным преимуществом является то, что вы можете отладить его там. И в плюс вы можете использовать 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 или имеет значение по умолчанию.

...