Repeater中使用PlaceHolder触发ItemCommand事件有关问题
Repeater中使用PlaceHolder触发ItemCommand事件问题
在Repeater中通过PlaceHolder动态添加的Button,点击之后不会触发ItemCommand事件。怎么样才能让placeHolder中添加的button也能触发ItemCommand事件?
aspx代码:
CS代码:
------解决方案--------------------
那些事件和控件最好在前台写。干嘛非得写在后台?
------解决方案--------------------
一般是不建议在 Page_Init中作数据的绑定的
在Repeater中通过PlaceHolder动态添加的Button,点击之后不会触发ItemCommand事件。怎么样才能让placeHolder中添加的button也能触发ItemCommand事件?
aspx代码:
- C# code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <div> <%# Eval("ID") %>,<%# Eval("Name") %>, <asp:Button ID="btnAdd" runat="server" Text="Add" CommandName="add" CommandArgument='<%# Eval("ID") %>' /> <asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Enabled"></asp:PlaceHolder> </div> </ItemTemplate> </asp:Repeater> </div> </form> </body> </html>
CS代码:
- C# code
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Repeater1.ItemCommand += new RepeaterCommandEventHandler(Repeater1_ItemCommand); if (!IsPostBack) { List<Entity> list = new List<Entity>() { new Entity() { ID = 1, Name = "aaa"}, new Entity() { ID = 1, Name = "bbb" }, new Entity() { ID = 1, Name = "bbb" } }; Repeater1.ItemDataBound += new RepeaterItemEventHandler(Repeater1_ItemDataBound); Repeater1.DataSource = list; Repeater1.DataBind(); } } protected override void OnInit(EventArgs e) { base.OnInit(e); } protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Entity entity = (Entity)e.Item.DataItem; PlaceHolder PlaceHolder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); Button btnCancel = new Button(); btnCancel.ID = "btnCancel" + entity.ID; btnCancel.CommandName = "cancel"; btnCancel.CommandArgument = entity.ID.ToString(); btnCancel.Text = "Cancel " + entity.Name; PlaceHolder1.Controls.Add(btnCancel); } } public class Entity { public int ID { get; set; } public string Name { get; set; } } protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { Response.Write(e.CommandName); } } }
------解决方案--------------------
那些事件和控件最好在前台写。干嘛非得写在后台?
------解决方案--------------------
一般是不建议在 Page_Init中作数据的绑定的