ПРОБЛЕМА РЕШЕНА: Я пропустил очень простую проблему, и это то, что на самом деле это два разных приложения, работающих под одним веб-сайтом. Я немного изменил URL-адрес в вызове AJAX, чтобы отразить это, и проблема больше не происходит.ASP.NET MVC Session с использованием jQuery
ORIGINAL ВОПРОС:
У меня странные проблемы, и я надеюсь, что кто-то может помочь пролить свет на ситуацию.
У меня есть страница, ваша стандартная корзина для покупок, где я пытаюсь получить подачу промо-кода для работы через AJAX. Все работает отлично, за исключением моего состояния сеанса. Когда я впервые загружаю страницу корзины покупок, я смотрю на тележку в сеансе (если ее нет, я издеваюсь над ней, так как я просто шаблонирую/проверяю вещи прямо сейчас) и прямо перед тем, как я вернусь, я сохраняю корзину вернуться в сеанс. Я делаю то же самое в своем действии AJAX, которое возвращает частичное представление.
Вот где проблема приходит в:
Кажется, как будто две разные версии телеги возвращаются из сессии в зависимости от того, каких действий я буду, что, конечно, не то, что я после ,
Вот как я могу сказать, что есть проблема:
- загружает страницу первоначально, издеваться корзина сохраненной в сессию.
- Загрузите страницу, чтобы проверить правильность сохранения телеграммы.
- Введите код подтверждения, которую вы видите на картинке.
- Mock cart снова сохранен на сеансе, на этот раз с примененной скидкой.
- Перезагрузите страницу снова, корзина получена с сеанса, но это первая корзина, которую я сохранил.
- Введите символы (цифры и латинские буквы), чтобы узнать, есть ли в наличие рекламной ролики.
- Затем я повторяю этот процесс несколько раз, чтобы дважды проверить мое здравомыслие, но то, что я описал, очень часто происходит, когда я его описывал.
Так что теперь я очень смущен и разочарован, так как это единственное, что на моем пути в данный момент. Я надеюсь, что это просто, что мне не хватает, но поиск этой проблемы (здесь и Google) дает мне результаты, охватывающие очень широкий спектр тем.
EDIT: По желанию ниже, вот код для сохранения/извлечения телегу:
private void SaveCart(ShoppingCartContainer cart)
{
Session["Cart"] = cart;
}
private ShoppingCartContainer RetrieveCart()
{
ShoppingCartContainer cart = (ShoppingCartContainer)Session["Cart"];
if (cart != null)
{
return cart;
}
return null;
}
EDIT: Вот методы действий
public ActionResult ListItems(string userid)
{
var retval = RetriveCart();
if(retval == null)
{
retval = _model.Show(userid);
if (retval == null)
{
return Redirect("/");
}
}
SaveCart(retval);
return View("List", retval);
}
public ActionResult ApplyPromoCode(string promocode, string userid)
{
var cart = RetriveCart();
if (cart == null)
{
cart = _model.Show("blah");
}
cart = _model.ApplyPromoCode(promocode, "blah");
SaveCart(cart);
if (Request.IsAjaxRequest())
{
return PartialView("ShoppingCartFooter", cart);
}
return RedirectToAction("ListItems", new { userid = "blah" });
}
ПРИМЕЧАНИЕ: Как я уже сказал, я m делать templating/testing, поэтому некоторые из кода между вызовами «Восстановить» и «Сохранить» могут быть немного бессмысленными. Тем не менее, я более или менее излагал эти проблемы, поскольку проблема возникает, прежде чем я даже доберусь до них.
ОБНОВЛЕНИЕ: Дальнейшее подтверждение моих подозрений о том, что происходит, заключается в том, что когда я просто отправляю форму без jQuery, улавливая подачу формы, корзина правильно сохраняется, так что, когда я загружаю страницу нормально, промо-код остается примененным ,
ОБНОВЛЕНИЕ # 2: Просто посмотрел, что происходило при первом вызове AJAX. Похоже, что переменная сеанса имеет свойство «IsNewSession», установленное в новом при первом вызове AJAX, хотя я уже начал работу по прибытии на страницу. Я не могу объяснить, почему это происходит, но вот дополнительная информация, которая может быть актуальна:
Мы используем фабрику контроллера Windsor («мы», я не имею в виду меня, я просто подключаюсь шаблоны для просмотра и выполнения достаточного внутреннего кода для правильной работы потока). Я не знаком с ним, но может ли это быть частью проблемы?
Я не знаком с сессией в ASP.NET за пределами добавления и удаления элементов. Тем не менее, я проверял идентификатор сеанса на обеих сессиях, и он всегда был одинаковым для обоих случаев. –
Каков ваш код для извлечения и сохранения вашей корзины в обоих ваших действиях? – Gregoire
Код для сохранения/извлечения корзины добавлен к вопросу –