Я предполагаю, что это не правильный путь?
Да, это неправильный путь (пропустите последний абзац моего ответа, чтобы знать правильный путь, который вообще не должен использовать сессию ASP.NET). Правильный путь сначала получить объект, хранящийся внутри сессии, пытаясь его бросить его к тому же типу .NET лет uhave хранится внутри сессии:
var products = Session["ShoppingCart"] as List<Products>;
, а затем, если этот элемент не пустой добавить соответствующий продукт к списку. Мы, конечно, должны сделать необходимые проверки типов, что сеанс фактически содержал значение с указанным ключом и что это значение ожидаемого типа:
if (products != null)
{
var product = new Products { ID = productId, Name = name };
products.Add(product);
}
Конечно, мы используем ссылки на объект здесь, который будет работать только если вы сохраняете сессию в памяти (sessionState mode = InProc), которая, конечно же, является абсолютно ужасной катастрофой и что-то, чего вы никогда не должны делать в производстве. В производственной среде вы, вероятно, сохраняете свою сессию на сервере сеансов или даже на сервере SQL, не так ли? В этом случае более чем очевидно, что работа с объектными ссылками - это рецепт катастрофы. Таким образом, в этом случае, как только вы добавили новый продукт сессии вы должны, конечно, установить обратно новое значение списка на сессии, которая будет сериализовать экземпляр объекта к соответствующему хранилищу данных:
if (products != null)
{
var product = new Products { ID = productId, Name = name };
products.Add(product);
Session["ShoppingCart"] = products;
}
Теперь, после того, как все при этом я должен признать, что использование сеанса ASP.NET, вероятно, является большой ошибкой, которую вы когда-либо совершали в реальном мире. Поэтому в основном каждый раз, когда вы используете Session["xxx"]
, вы делаете это неправильно. Просто найдите все решение для ключевого слова Session
и просто избавитесь от него.
Возможный дубликат [ASP.net, добавление объектов в переменную сеанса] (http://stackoverflow.com/questions/8056323/asp-net-adding-objects-to-a-session-variable) – terbubbs