Трудно сказать, что вы собираетесь делать, потому что здесь происходит ряд проблем.Так как ваши динамически сгенерированные кнопки создаются в обработчике событий SelectedIndexChanged вашего выпадающего меню, они не будут существовать и не будут привязываться к событиям при следующей обратной передаче.Это означает, что они могут отображаться на странице, но нажатие на них ничего не изменит.Во-вторых, поскольку вы сохраняете SelectedValue в Session, а затем используете это значение для установки идентификаторов кнопок, вы будете создавать кнопки с дублирующимися идентификаторами, если пользователь когда-нибудь вернется на страницу.(Я заметил, что вы удаляете элемент списка после его выбора, но он вернется, если пользователь обновит страницу, а объект сеанса останется заполненным.)Последняя странность, я не смог найти, где обрабатывается ваше конкретное исключение, и не смог воспроизвести его.Против какой версии .NET вы программируете?Вы вызываете событие нажатия кнопки где-нибудь из кода?Теперь, когда все сказано, я предоставляю следующее исправление (или, по крайней мере, улучшение):
protected void Page_Init(object sender, EventArgs e)
{
CreateButtons();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, typeof(Page), "Close", "javascript:OpenPopUp1();", true);
if (Session["filter"] == DropDownList1.SelectedValue)
{
}
else
{
if (Session["filter"] == "")
{
Session["filter"] = DropDownList1.SelectedValue + ":";
}
else
{
Session["filter"] = DropDownList1.SelectedValue + ":" + Session["filter"];
}
}
DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);
CreateButtons();
}
private void CreateButtons()
{
PlaceHolder1.Controls.Clear();
if (Session["filter"] != null)
{
string asd = Session["filter"].ToString();
string[] split = asd.Split(':');
for (int i = 0; i < split.Count(); i++)
{
string filter = split[i].ToString();
Button button = new Button();
button.Text = split[i].ToString();
button.ID = split[i].ToString();
button.Attributes.Add("onclick", "remove(" + split[i].ToString() + ")");
button.Click += new System.EventHandler(button_Click);
PlaceHolder1.Controls.Add(button);
}
}
}
private void button_Click(object sender, EventArgs e)
{
//do something...
Response.Write("hello");
}