我有一个购买我的Umbraco网站的购物车,以及在此购物车中添加商品的按钮 . 购物车以“(x)项目”的形式显示在导航栏中站点的顶部,其中x是购物车中的项目数 .

我使用Razor构建导航并渲染出这个购物车 . 它从会话中获取购物车ID,并从数据库中获取要显示的项目数,而不是“x” .

@{
  Cart cart = null;
  int numItems = 0;

  if(Session["cart_id"] != null)
  {
      int cid = Convert.ToInt32(Session["cart_id"]);
      cart = CartFactory.GetCart(cid);
      if(cart != null)
      {
          numItems = cart.Items.Count;
      }
  }
}


<a href="/...">
    <span>(@numItems) Items</span>
</a>

我添加项目的代码只是从会话中获取当前购物车ID(或者如果未设置则创建新购物车)并在数据库中插入“购物车项目” .

protected void addToCart(object sender, EventArgs e)
{
  //Create Cart if one does not exist in session
  if (Session["cart_id"] == null)
      Session["cart_id"] = CartFactory.CreateCart();
  int cid = Convert.ToInt32(Session["cart_id"]);

  // ... add the item to the database...

  string script = "highlightCart();";
  this.Page.ClientScript.RegisterStartupScript(Page.GetType(), "Key", script, true);
}

单击“添加到购物车”后,该项目将添加到数据库中并突出显示购物车(通过调用javascript函数) . 但是,在我再次重新加载页面之前,X项目不会更新,我不知道为什么 .

我也不确定这是否与Razor缓存该值有关,但据我所知,我没有启用它 . 我最初通过updatePanel调用addToCart()来执行此操作而不刷新页面,但删除了这个以便Razor重新加载,再次 grab 购物车并反映更新,但它不会这样直到我自己刷新页面 .

Update

我在网站的另一个区域遇到了同样的问题;查看购物车页面 . 在这里,我有一个加载当前购物车及其票据的控件 . 我有一个更新数量的按钮,点击后,发生了类似的事情 . 我不得不手动刷新页面以显示更改 .

我通过在更新购物车方法的末尾调用LoadCart()方法来修复此问题 . 但是,我不能用上面提到的剃须刀推车 . 我有一个用户控件,其中包含按钮和addToCart操作,以及一个显示购物车中商品数量的剃须刀宏 . 我有没有办法让这个宏更新而无需手动刷新?