使用jQuery的ASP.NET MVC会话
解决的问题: 我忽略了一个非常简单的问题,那就是这实际上是在一个网站下运行的两个不同的应用程序。我在AJAX调用中稍微修改了URL以反映这一点,问题不再发生 原始问题: 我有一个奇怪的问题,我希望有人能帮我了解一下情况 我有一个页面,你的标准问题购物车,在那里我试图通过AJAX提交促销代码。除了我的会话状态之外,一切都很顺利。当我第一次加载购物车页面时,我会在会话中查找购物车(如果它不在那里,我会模拟它,因为我现在只是在模板化/测试东西),在返回视图之前,我会将购物车保存回会话中。我在返回部分视图的AJAX操作中也做了同样的事情 这就是问题的症结所在: 看起来好像有两个不同版本的购物车从会话中返回,这取决于我将要执行的操作,当然这不是我要执行的操作 以下是我如何判断存在问题的方法:使用jQuery的ASP.NET MVC会话,jquery,asp.net-mvc,ajax,session,session-state,Jquery,Asp.net Mvc,Ajax,Session,Session State,解决的问题: 我忽略了一个非常简单的问题,那就是这实际上是在一个网站下运行的两个不同的应用程序。我在AJAX调用中稍微修改了URL以反映这一点,问题不再发生 原始问题: 我有一个奇怪的问题,我希望有人能帮我了解一下情况 我有一个页面,你的标准问题购物车,在那里我试图通过AJAX提交促销代码。除了我的会话状态之外,一切都很顺利。当我第一次加载购物车页面时,我会在会话中查找购物车(如果它不在那里,我会模拟它,因为我现在只是在模板化/测试东西),在返回视图之前,我会将购物车保存回会话中。我在返回部分视
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" });
}
注意:正如我所说的,我正在做模板/测试,因此检索和保存调用之间的一些代码可能有点荒谬。然而,我或多或少地排除了这些问题,因为问题发生在我讨论这些问题之前
更新:
进一步证实我的怀疑是,当我只是提交表单而jQuery没有捕获表单提交时,购物车会被正确保存,这样当我正常加载页面时,促销代码仍然适用
更新#2:
只是查看了第一次AJAX调用时发生的情况。在第一次AJAX调用中,会话变量的“IsNewSession”属性似乎设置为new,即使我在到达页面时已经开始了。我无法解释为什么会发生这种情况,但这里还有一些可能相关的信息:
我们正在使用Windsor控制器工厂(我不是指我,我只是将模板连接到视图,并编写足够的后端代码以使流程正常工作),我不熟悉它,但这可能是问题的一部分吗?您确定在这两个操作中使用相同的购物车会话变量吗?除了添加和删除项目之外,我对ASP.NET中的会话不太熟悉。但是,我检查了两个会话上的会话id,每次都是相同的。在两个操作中检索和保存购物车的代码是什么?购物车保存/检索代码添加到问题中,只是可以简化:“if(cart!=null){return cart;}return null;”in“return cart;”我看这段代码没有错。我们能看看你的两个动作码吗?对不起,我没有任何线索。它看不出有什么不对劲