Я сгенерировал две кнопки и поместил их в список кнопок ..
List<Button> buttons = new List<Button>();
Button pgs=new Button
for(int i=0;i<2;i++)
pgs.Width = 20;
pgs.Command += obtainTopicsPerPage_Click;
pgs.CommandName = i.ToString();
pgs.Text =i.ToString();
btns.Add(tPage.ToString());
buttons.Add(pgs);
Я добавил кнопки в заполнитель, и они появляются на странице.
У них есть следующее событие:
void obtainTopicsPerPage_Click(Object sender, CommandEventArgs e)
{
foreach (var item in tPages)
{
if (item.Key == e.CommandName)
{
foreach (var posts in item.Value)
{
posts.ExecuteAll();
}
}
}
MyButtonTable();
}
Неважно, что делают функции (они просто создают таблицы и делают их похожими на посты на странице форума) ..
Теперь, когда пользователь нажимает любую из кнопок, которые появляются на экране ... ни одно из событий не запускается ... Я поставил точку разрыва внутри метода eventhanlder, и веб-приложение не достигает этого.
Все, что меня беспокоит, это то, почему кнопки не привязаны к методу обработки событий, который я им дал ... почему, когда я устанавливаю точку останова в том случае, если она никогда не срабатывает.
Что должно произойти, когда кнопка нажата ... событие должно быть инициировано первым, а страница должна загрузиться второй. Но этого не происходит ... что происходит, если событие кнопки пропускается, а событие загрузки страницы запускается при каждом постбэке после нажатия кнопки ...
Обновлен:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default2 : System.Web.UI.Page
{
string[] d;
protected void Page_Load(object sender, EventArgs e)
{
d = new string[] { "dfadfas", "daads", "dasda", "dads" };
Buttons();
}
List<Button> btns;
public void Buttons()
{
btns = new List<Button>();
for (int i = 0; i < 20; i++)
{
Button d = new Button();
d.Text = "Click me";
d.Click += Me_Click;
btns.Add(d);
}
function();
}
public void function()
{
foreach (var item in btns)
{
PlaceHolder1.Controls.Add(item);
}
}
public int i { get{object o=ViewState["i"];return (o==null)?0:(int)o;} set{ViewState["i"]=value;} }
public void Me_Click(object sender, EventArgs e)
{
foreach (var item in d)
{
Label da= new Label();
da.Text = "d"+i+++"<br/>";
this.Controls.Add(da);
}
}
}
Рабочий код выше ..
Я протестировал, сохранив список кнопок с сессией. Здесь я воссоздаю кнопки на PreInit
void Page_PreInit(object sender, EventArgs e)
{
List<Button> btn = (List<Button>)Session["Buttons"];//debugging shows 2 buttons
if (btn != null)
{
foreach (var item in btn)
{
item.Width = 20;
item.Command += obtainTopicsPerPage_Click;
item.CommandName = tPage.ToString();
item.Text = tPage.ToString();
}
}