我是ASP .Net编程的初学者 我正在开发一个小的培训Web应用程序 我开发了一个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事件处理程序。
有人可以给我一个理由吗?
答案 0 :(得分:0)
我不想,但我终于看到了培训申请的解决方案 我可以描述解决问题所需的操作,但我无法准确解释为什么必须完成操作。
诀窍是在ASPX页面中声明一个PlaceHolder控件 必须使用Page_Load事件处理程序中的“删除项目”按钮填充PlaceHolder,如下所示:
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事件之后注册。