2012-04-09 2 views
1

Когда я пишу:ASP.NET - Предоставление сеанса объекта значение по индексу вызывает ошибку

Session["conString"]= theConString; 

Он отлично работает. но если я пытаюсь написать:

Session[0] = the ConString; 

я получаю «Индекс был вне диапазона Должно быть неотрицательным и меньше, чем размер коллекции.» ошибка. Я понимаю, что это типичная ошибка для массивов. Это означает, что я пытаюсь установить значение объекта, который не существует. Но почему я могу это сделать, указав имя для объекта сеанса. Есть способы сделать это: 1Создание имени строки или числового индекса. Мне нужен этот параметр, потому что на других страницах я не хочу запоминать имена строк, вместо этого я хочу объявлять глобальные константы и обращаться к ним с использованием этих константных имен.

ответ

1

Контейнер для сеанса имеет длину 0 при инициализации, поэтому вы пытаетесь установить значение элемента, который еще не существует. Принимая во внимание, что использование именованного ключа будет изменять размер контейнера по мере необходимости.

+0

Хм, так что есть специальный кредит, предоставляемый способом использования именованного ключа. Таким образом, он делает что-то вроде Session.Add («conString», theConString) правильно? Тогда указание именованного ключа оказывается ярлыком для этого метода. –

+0

Теперь я помню, что я могу также объявлять строковые константы. –

+0

По существу, да. ИМХО, позиционный индексист на Сессите выглядит глупым и имеет запах кода, но я полагаю, что может быть некоторая причина перечислить элементы по индексу и, возможно, заменить их. В любом случае, в практическом мире вам нужно будет только получить/установить сеансовые элементы с помощью ключа. – HackedByChinese

Смежные вопросы