我的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重新加载,再次抓住购物车并反映更新,但直到我自己刷新页面它才会这样做。
更新
我在网站的另一个区域遇到过同样的问题;查看购物车页面。在这里,我有一个加载当前购物车及其票据的控件。我有一个更新数量的按钮,点击后,发生了类似的事情。我必须手动刷新页面才能显示更改。
我通过在update cart方法的末尾调用LoadCart()方法来解决这个问题。但是,我不能用上面提到的剃须刀推车。我有一个用户控件,其中包含按钮和addToCart操作,以及一个显示购物车中商品数量的剃须刀宏。我有没有办法让这个宏更新而不需要手动刷新?