【问题标题】:passing arguments with postback to page将带有回发的参数传递到页面
【发布时间】:2011-10-15 23:02:01
【问题描述】:

我有一个带有一些用户控件的 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);
        }
    }   

CartProduct UserControl 代表 AppProduct 实体

现在我删除产品(用户控件)的方法是将其从列表中删除,如下所示:

    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");  
    }

现在这可行,但是必须回发然后再次重定向以生效从列表中删除发生在回发上似乎是错误的,但会生效 仅在下一页加载时,重新加载列表时。 如果我可以在回帖的页面加载期间如何从列表中删除该项目 无需再次重新定向。

有什么想法可以跳过重定向吗? 我想也许可以通过回发发送参数,但我不知道这是否可能,因为我可以在调用 Load_Products 之前发送产品 ID 并将其从列表中删除。

提前致谢 埃兰。

【问题讨论】:

    标签: c# asp.net postback


    【解决方案1】:

    您为什么不使用更新的产品列表再次调用 Load_Products,而不是重定向?

    【讨论】:

    • 好吧,这是个好主意,但是这样做会出现问题,即使我调用 Load_Products 并且它会在我的列表中加载所有剩余的产品,未刷新的页面仍会显示较早出现的在最后一页加载时加载的用户控件。
    • @continue 在这里:假设我有 2 个用户控件:something1 something1_date [checked] something2 something2_date [checked] 现在从列表中删除 something1(取消选中他),然后调用 Load_Products 结果将是 something1 something1_date [un-checked] something2 something2_date [checked] something2 something2_date [checked] 它会将项目添加到非刷新页面。该页面不知道列表已更改,它只是根据列表的内容加载用户控件。
    • @eran:您正在将 CartProduct 控件添加到 tbl_products(即:tbl_products.Rows.Add(row);)。它是否正确?如果是这种情况,只需从 tbl_products - tbl_products.Rows.Clear() 中清除现有行。将此行添加为 Load_Products 的第一行。这有意义吗?
    • no.. 我之前评论过,虽然这在逻辑上是一个好主意,但是在处理 asp 页面时,更改(对页面)只会发生在页面加载时,当它读取再次列出并相应地加载产品。
    • @eranotzer:对不起,我一定是误会了什么。这是我对您的页面逻辑的理解: 1:在第一个 Page_Load 上,您调用 Load_Products。 2:然后用户与引发 prd_Product_Checked 方法的控件交互 3:在回发时,检查 Page.IsPostBack 并且不要重新加载控件。 4:调用 prd_Product_Checked 方法并从购物车中删除产品。 5:然后您再次调用 Load_Products。这是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多