0

我是 ASP .Net 编程的初学者。
我正在开发一个小的培训网络应用程序。
我开发了一个 Web 表单,用户可以在其中将商品添加到购物车中。
用户的购物车与会话变量匹配。

我在 Page_PreRender 事件处理程序中检查用户的购物车是否为空。
如果购物车不为空,则将表格插入到表单中。
购物车中的每一项都与表格中的一行相匹配。
一个项目行包含一个 HtmlInputSubmit 以从购物车中删除该项目。

这是我编写的用于动态创建“删除项目” HtmlInputSubmit 的代码:

submitSupprimerArt = new HtmlInputSubmit();
cellTblCaddie.Controls.Add(submitSupprimerArt);

submitSupprimerArt.Value = "Supprimer " + article.Id;
submitSupprimerArt.Attributes.Add("articleId", article.Id);
submitSupprimerArt.ServerClick += new EventHandler(submitSupprimerArt_Click);

当用户单击 HtmlInputSubmit 时,会进行回发,但不会调用 submitSupprimerArt_Click 事件处理程序。
有人可以给我一个理由吗?

4

1 回答 1

0

我不想,但我终于看到了培训应用程序的解决方案。
我可以描述解决我的问题所需的操作,但我无法准确解释为什么必须执行这些操作。

诀窍是在 ASPX 页面中声明 PlaceHolder 控件。
PlaceHolder 必须用 Page_Load 事件处理程序中的“删除项目”按钮填充,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    // ...

    caddie = (ListeArticles)this.Session["caddie"];
    if (caddie != null)
    {
        foreach (Article article in caddie)
        {
            btnSupprimerArt = new Button();
            this.phBoutonsSupprArt.Controls.Add(btnSupprimerArt);

            btnSupprimerArt.ID = "btnSupprimerArt" + article.Id;
            btnSupprimerArt.Command += new CommandEventHandler(btnSupprimerArt_Command);
            btnSupprimerArt.CommandName = article.Id;
            btnSupprimerArt.Text = "Supprimer " + article.Id;
        }
    }
}

PlaceHolder 的 Controls 属性从 Page_PreRender 事件处理程序中清除。
然后从 Page_PreRender 事件处理程序中创建“删除项目”按钮。
这次“删除项目”按钮被插入到表格单元格中。

结论(可能需要修订):
将处理程序注册到动态控制事件似乎有点棘手。
显然,每个事件处理程序都必须在 Page_Load 事件之后注册。

于 2012-11-12T17:20:36.390 回答