2009-09-08 60 views
2

問題已解決: 我忽略了一個非常簡單的問題,那就是這實際上是在一個網站下運行的兩個不同的應用程序。我稍微修改了AJAX調用中的URL以反映該問題,並且問題不再發生。使用jQuery的ASP.NET MVC會話

原題:

我有一個奇怪的問題,我希望有人能幫助闡明這種情況的一些情況。

我有一個頁面,您的標準問題購物車,我試圖讓促銷代碼提交工作通過AJAX。除了我的會話狀態,一切都很好。當我第一次加載購物車頁面時,我會在會話中查找購物車(如果它不在那裏,我只是模擬一個,因爲我現在僅僅是模板化/測試)並且在返回視圖之前,我保存購物車回到會話中。我在我的AJAX操作中做同樣的事情,返回一個局部視圖。

這裏就是問題進來:

看來,如果兩個不同版本的車都是從會議根據其動作我要去,這當然不是我後我回來了。

以下是我可以告訴有一個問題:

  1. 我加載頁面開始,模擬車保存會話。
  2. 重新載入頁面以檢查購物車是否已正確保存到會話中。
  3. 輸入促銷代碼,購物車檢索過程中的折點顯示會話中沒有購物車。
  4. 模擬購物車再次保存到會話,這次應用了折扣。
  5. 重新載入頁面,從會話中檢索到購物車,但它是我保存的第一個購物車。
  6. 重新輸入促銷代碼,這次它確實在會話中找到購物車,但它是已應用折扣的代碼。
  7. 然後我重複這個過程幾次來仔細檢查我的理智,但是我描述的非常多,就像我描述的那樣。

所以現在我很困惑,也很沮喪,因爲這是我目前唯一的方式。我希望這是我錯過的一件簡單的事情,但尋找這個問題(這裏和谷歌)給我的結果涵蓋了非常廣泛的主題。

編輯:按照下面的要求,這裏是保存/檢索購物車的代碼:

private void SaveCart(ShoppingCartContainer cart) 
{ 
    Session["Cart"] = cart; 
} 

private ShoppingCartContainer RetrieveCart() 
{ 
    ShoppingCartContainer cart = (ShoppingCartContainer)Session["Cart"]; 
    if (cart != null) 
    { 
     return cart; 
    } 
    return null; 
} 

編輯:這裏是行動方法

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" }); 
} 

注:正如我所說的,我在進行模板/測試時,Retrieve和Save調用之間的一些代碼可能有點荒謬。然而,我已經或多或少地將這些問題排除在外,因爲問題在我接觸到問題之前就已經發生了。

更新: 進一步確認我對發生的事情的懷疑是,當我簡單地提交沒有jQuery的表單提交表單提交時,購物車得到正確保存,所以當我正常加載頁面時,促銷代碼仍然應用。

UPDATE#2: 剛剛查看了第一次AJAX調用中發生的事情。看來會話變量在第一次AJAX調用時將「IsNewSession」屬性設置爲new,即使我已經在抵達頁面時開始了。我無法解釋爲什麼會發生這種情況,但以下是一些可能相關的信息:

我們使用溫莎控制器工廠(「我們」,我不是指我,我只是連接模板來查看和做足夠的後端代碼來使流程正常工作)我不熟悉它,但這可能是問題的一部分嗎?

回答

1

您確定在兩個操作中使用相同的購物車會話變量嗎?

+0

我不熟悉ASP.NET中添加和刪除項目之外的會話。但是,我確實在兩次會話中檢查了會話ID,並且每次都始終保持相同。 – 2009-09-08 14:56:13

+1

什麼是您的代碼來檢索並保存您的購物車在你的兩個行動? – Gregoire 2009-09-08 15:02:00

+0

用於購物車保存/檢索的代碼添加到問題 – 2009-09-08 15:24:23