Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery的ASP.NET MVC会话_Jquery_Asp.net Mvc_Ajax_Session_Session State - Fatal编程技术网

使用jQuery的ASP.NET MVC会话

使用jQuery的ASP.NET MVC会话,jquery,asp.net-mvc,ajax,session,session-state,Jquery,Asp.net Mvc,Ajax,Session,Session State,解决的问题: 我忽略了一个非常简单的问题,那就是这实际上是在一个网站下运行的两个不同的应用程序。我在AJAX调用中稍微修改了URL以反映这一点,问题不再发生 原始问题: 我有一个奇怪的问题,我希望有人能帮我了解一下情况 我有一个页面,你的标准问题购物车,在那里我试图通过AJAX提交促销代码。除了我的会话状态之外,一切都很顺利。当我第一次加载购物车页面时,我会在会话中查找购物车(如果它不在那里,我会模拟它,因为我现在只是在模板化/测试东西),在返回视图之前,我会将购物车保存回会话中。我在返回部分视

解决的问题: 我忽略了一个非常简单的问题,那就是这实际上是在一个网站下运行的两个不同的应用程序。我在AJAX调用中稍微修改了URL以反映这一点,问题不再发生

原始问题:

我有一个奇怪的问题,我希望有人能帮我了解一下情况

我有一个页面,你的标准问题购物车,在那里我试图通过AJAX提交促销代码。除了我的会话状态之外,一切都很顺利。当我第一次加载购物车页面时,我会在会话中查找购物车(如果它不在那里,我会模拟它,因为我现在只是在模板化/测试东西),在返回视图之前,我会将购物车保存回会话中。我在返回部分视图的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;”我看这段代码没有错。我们能看看你的两个动作码吗?对不起,我没有任何线索。它看不出有什么不对劲