C# 通过回发到页面传递参数

C# 通过回发到页面传递参数,c#,asp.net,postback,C#,Asp.net,Postback,iv'e有一个带有一些用户控件的aspx页面,所有这些控件都包含一个复选框 将用户控件添加到页面时,将选中该复选框。 该复选框设置为“自动回发” 我需要的是,当自动回发发生时,用户控件将消失 首先,我加载用户控件的方式是: 我将它们作为行加载到表中,并为它们的ID值提供它们所表示的实体的值 private void Load_Products(List<AppProduct> user_products) { HtmlTableRow row = nul

iv'e有一个带有一些用户控件的aspx页面,所有这些控件都包含一个复选框

将用户控件添加到页面时,将选中该复选框。 该复选框设置为“自动回发”

我需要的是,当自动回发发生时,用户控件将消失

首先,我加载用户控件的方式是: 我将它们作为行加载到表中,并为它们的ID值提供它们所表示的实体的值

   private void Load_Products(List<AppProduct> user_products)
    {
        HtmlTableRow row = null;
        foreach(AppProduct p in user_products)
        {
            row = new HtmlTableRow();
            tbl_products.Rows.Add(row);

            CartProduct prd = (CartProduct)Page.LoadControl("~/UserControls/CartProduct.ascx");

            prd.Title = p.Title;
            prd.Price = p.Price.ToString();
            prd.Pid = p.Pid.ToString();
            prd.ID = p.Pid.ToString();
            prd.State = 2;

            prd.Product_Checked += new EventHandler(prd_Product_Checked);

            HtmlTableCell cell = new HtmlTableCell();
            cell.Controls.Add(prd);
            row.Cells.Add(cell);
        }
    }   
现在,这是可行的,但是为了生效,必须回发然后再次重定向似乎是错误的。从列表中删除发生在回发上,但会生效 仅在下一页加载时,当列表重新加载时。 如果我能告诉你如何在回发的页面加载过程中从列表中删除该项目 不用再重新导演了

有没有办法跳过重定向? 我想可能会通过回发发送参数,但我不知道这是否可行,因为这样我就可以在调用Load_Products之前发送产品id并将其从列表中删除

提前谢谢
eran.

代替重定向,为什么不使用更新的产品列表再次调用Load\u Products?

好的,这是个好主意,但这样做有一个问题,即使我调用Load_Products,它也会加载我列表中所有剩余的产品。未刷新的页面仍然显示上次加载页面中加载的用户控件的早期事件。@继续:假设我有2个用户控件:Something 1 Something 1_date[选中]Something 2 Something 2_date[选中]现在我将从列表中删除一些内容1(取消选中他),并调用Load\u Products。结果将是一些内容1一些内容1\u date[未选中]一些内容2\u date[选中]一些内容2一些内容2\u date[选中]它会将项目添加到未刷新的页面。该页面不知道列表已被更改,它只是根据列表的内容加载用户控件。@eran:您正在将CartProduct控件添加到tbl_产品(即:tbl_products.Rows.add(row);)。这是否正确?如果是这样,只需清除tbl_products中的现有行-tbl_products.rows.clear()。将此行添加为Load_products的第一行。这有意义吗?没有。我之前评论过,虽然这在逻辑上是一个好主意,但在处理asp页面时,更改(到页面)只有在页面加载时才会发生,当它再次读取列表并相应地加载产品时。@eranotzer:对不起,我一定是误解了什么。这是我对页面逻辑的理解:1:在第一个页面加载时,您称为加载产品。2:然后用户与一个控件交互,该控件抛出prd\U产品检查方法3:在pos上tback,检查Page.IsPostBack,不重新加载控件。4:调用prd_Product_Checked方法,然后从购物车中删除产品。5:然后再次调用Load_Products。是否正确?
    void prd_Product_Checked(object sender, EventArgs e)
    {      // this removes the product from the same list that the load products function gets
           ProductChangedEventArgs args = (ProductChangedEventArgs)e;
           cart.RemoveProduct(uid, args.Pid);                        
           Response.Redirect("~/Pages/cart.aspx");  
    }