页面刷新和绑定不起作用

时间:2010-01-03 21:47:53

标签: asp.net

我有一个.aspx,里面有一个.ascx。在.ascx中我有一个服务器控件。

.aspx包含购物车中的商品列表 .ascx列出了一些交叉销售商品(从自定义服务器控件提供),如果需要,客户可以将其添加到购物车

购物车中的商品列表和交叉销售商品列表都由转发器驱动并在页面加载时绑定。因此.aspx调用一个方法来重新绑定页面加载时的购物车项目。并且.ascx在其页面加载中调用一个方法来重新绑定我的.ascx中自定义控件(.cs)中的交叉销售项目。

我遇到的问题是,当用户点击我的自定义控件内的转发器中的“添加到购物车”按钮时,页面会刷新,应该发生什么是.aspx中的购物车项目和交叉销售列表应该refrsh显示交叉销售物品已移至购物车。但是,即使我在调试时看到列表在移动后使用相应的项目反弹,该页面仍显示旧状态。我必须再次手动刷新页面才能使其正常工作。

我想我需要检查Page.IsPostback?但即使我没有检查..至少两个列表应该刷新,不管是因为我在页面加载中有它。所以,即使它是一个回发,我也没有检查列表应该显示新的状态,因为我甚至都没有检查回发。所以检查postaback我不认为是这里的问题因为我希望列表重新绑定并重新更新任何页面加载....初始或如果它是一个回发...它没关系。每次都要重新加载。但它似乎并没有这样做,即使我清楚地看到列表具有正确的数量(在交叉销售时减少一个,在用户点击按钮后添加一个额外的购物车)。< / p>

让我们再说一遍。这是事件的顺序:

  1. 用户在购物车页面上
  2. 用户看到已经添加到购物车的购物车商品列表(此列表绑定在Cart.aspx中,并在每次加载页面时反弹)
  3. 用户可以在页面的某个位置查看可以添加到购物车的可能的交叉销售商品列表。这个列表是我的.ascx中的自定义控件,而.ascx显然在我的.aspx中。自定义控件只是一个列出交叉销售商品的转发器
  4. 用户点击其中一个交叉销售
  5. 上的“添加到购物车”按钮之一
  6. 页面刷新。在.aspx和.ascx的页面加载中,我将转到数据库并根据新状态重新绑定这些列表...即,将项目添加到购物车后的新列表,这意味着现在购物车项目应该还有一个添加到列表中,它确实...我清楚地看到新列表还有一个。
  7. 页面在刷新后返回,但我没有看到反映新状态的列表...我没有看到购物车项目列表中的新项目,并且添加的交叉销售甚至从交叉销售列表中删除虽然我调试时的两个列表都显示了反映新状态的正确记录集
  8. 所以我在这里迷失了为什么这没有向我展示更新的结果。

2 个答案:

答案 0 :(得分:1)

问题是,在page_load之后调用“添加到购物车”按钮的事件处理程序。这意味着旧项目受到约束。

解决方案是在eventhandler中手动强制.DataBind()。

尽管如此,我建议留在

if(!Page.IsPostBack)  
{  
   // bind cart
}  
在Page_Load中

以避免多重绑定。

答案 1 :(得分:0)

好的,因为我的添加到购物车按钮只是一个超链接,用户控件检查查询字符串中的标志以触发一个移动项目的方法(它在查询字符串中获取项目#也可以移动),我刚刚转移到购物车到父.aspx页面后,我做了一个重定向(Response.Redirect(Request.Path);)。这样它将为cart.aspx和myusercontrol.ascx点击页面加载并重新绑定网格。