2010-11-22 1 views
9

Я реализую простую телеграмму сеанса для не прошедших проверку пользователей в ASP.NET MVC, и я хочу сделать это правильно.Состояние сессии корзины покупок в ASP.NET MVC

В прошлом я всегда хранил идентификатор корзины в постоянном магазине Session["CartID"] и в качестве файла cookie. Всякий раз, когда мне нужно отображать тележку, я буду искать элементы корзины пользователя из таблиц Carts и CartItems. Но внутри я знаю, что более строго типизированный подход будет более чистым.

После Googling для последней сессии MVC, я нашел термин HttpSessionStateWrapper, который, как представляется, является способностью справляться с сеансами. Но я не нашел хороших учебников или стандартизированных реализаций. Может быть, это просто гул-слово, и я должен придерживаться Session["..."].

Каков правильный способ реализации корзины покупок с использованием сеансов в последней версии ASP.NET MVC?

ответ

4

Стив Сандерсон в своей книге Pro ASP.NET MVC Framework 2, дает хороший пример, как реализовать корзину покупок с помощью сеанса в ASP.NET MVC , Если у вас нет книги, вы можете получить представление, читающее here. Это очень аккуратный подход. Идея состоит в том, чтобы создать модельное связующее, которое выводит корзину из сеанса. Действия, которые используют корзину покупок, приведут к тому, что тележка «впрыснет» с помощью связующего. Когда вы тестируете эти методы, ваши тесты должны отвечать за передачу корзины в действие.

0

MVC использует проверяемую и макетную абстракцию класса HttpContext под названием HttpContextBase. Вам совсем не нужна обертка, и вы все равно можете высмеивать и легко настраивать контроллеры.

Первый пример, который я нашел на Google: http://weblogs.asp.net/andrewrea/archive/2009/08/10/mocking-the-session-object-with-moq-inside-asp-net-mvc-and-having-a-clean-builder-method-for-session-values-in-the-controller.aspx

+0

Это просто смехотворная реализация для состояния сеанса с «грязным» кодом типа `int pageSize = Session [" SpaceController! Index! PageSize "] == null? 10: Convert.ToInt32 (Session ["SpaceController! Index! PageSize"]); `Есть ли более простой, строго типизированный способ, который проверен и проверен? – 2010-11-22 19:15:03

+0

Как вы издеваетесь над вами. Как вы строго набираете доступ к сеансу, зависит от вас. Сессия зависит от строковых ключей и сохраняет объекты. В какой-то момент вам придется работать с ними. Я хотел бы указать на основные отличия в Asp.net MVC. – jfar 2010-11-22 19:17:26