2009-09-08 1 views
2

ПРОБЛЕМА РЕШЕНА: Я пропустил очень простую проблему, и это то, что на самом деле это два разных приложения, работающих под одним веб-сайтом. Я немного изменил URL-адрес в вызове AJAX, чтобы отразить это, и проблема больше не происходит.ASP.NET MVC Session с использованием jQuery

ORIGINAL ВОПРОС:

У меня странные проблемы, и я надеюсь, что кто-то может помочь пролить свет на ситуацию.

У меня есть страница, ваша стандартная корзина для покупок, где я пытаюсь получить подачу промо-кода для работы через AJAX. Все работает отлично, за исключением моего состояния сеанса. Когда я впервые загружаю страницу корзины покупок, я смотрю на тележку в сеансе (если ее нет, я издеваюсь над ней, так как я просто шаблонирую/проверяю вещи прямо сейчас) и прямо перед тем, как я вернусь, я сохраняю корзину вернуться в сеанс. Я делаю то же самое в своем действии AJAX, которое возвращает частичное представление.

Вот где проблема приходит в:

Кажется, как будто две разные версии телеги возвращаются из сессии в зависимости от того, каких действий я буду, что, конечно, не то, что я после ,

Вот как я могу сказать, что есть проблема:

  1. загружает страницу первоначально, издеваться корзина сохраненной в сессию.
  2. Загрузите страницу, чтобы проверить правильность сохранения телеграммы.
  3. Введите код подтверждения, которую вы видите на картинке.
  4. Mock cart снова сохранен на сеансе, на этот раз с примененной скидкой.
  5. Перезагрузите страницу снова, корзина получена с сеанса, но это первая корзина, которую я сохранил.
  6. Введите символы (цифры и латинские буквы), чтобы узнать, есть ли в наличие рекламной ролики.
  7. Затем я повторяю этот процесс несколько раз, чтобы дважды проверить мое здравомыслие, но то, что я описал, очень часто происходит, когда я его описывал.

Так что теперь я очень смущен и разочарован, так как это единственное, что на моем пути в данный момент. Я надеюсь, что это просто, что мне не хватает, но поиск этой проблемы (здесь и 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 («мы», я не имею в виду меня, я просто подключаюсь шаблоны для просмотра и выполнения достаточного внутреннего кода для правильной работы потока). Я не знаком с ним, но может ли это быть частью проблемы?

ответ

1

Вы уверены, что используете одну и ту же переменную сеанса в обоих действиях?

+0

Я не знаком с сессией в ASP.NET за пределами добавления и удаления элементов. Тем не менее, я проверял идентификатор сеанса на обеих сессиях, и он всегда был одинаковым для обоих случаев. –

+1

Каков ваш код для извлечения и сохранения вашей корзины в обоих ваших действиях? – Gregoire

+0

Код для сохранения/извлечения корзины добавлен к вопросу –