【发布时间】:2011-09-15 14:36:18
【问题描述】:
我生成了两个按钮并将它们放入按钮列表中..
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();
}
函数的作用无关紧要(它们只是创建表格并使其看起来像论坛页面中的帖子)..
现在,当用户单击屏幕上出现的任何一个按钮时..没有任何事件被触发..我在 eventthanlder 方法中设置了一个断点,Web 应用程序无法到达那里。
我所关心的是为什么按钮没有附加到我给它们的事件处理方法上。为什么当我在它永远不会触发的事件中设置断点时。
当点击按钮时应该发生什么......应该首先触发事件,然后应该加载页面。但这不会发生..发生的是按钮事件被跳过,并且在按钮单击后每次回发都会触发页面加载事件..
更新:
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);
}
}
}
上面的工作代码..
我通过使用 Session 保存按钮列表进行了测试。在这里,我在 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();
}
}
【问题讨论】:
-
您的第一个代码块似乎无效 - 请检查并更正。
-
它有效。我发布了一些...所有按钮都是有效的。和列表
-
您的代码可能在您的项目中有效,但请看一下 - 您在此处发布的内容无效。对于初学者,您的 for 循环没有大括号。
-
您提到使用 Click 时会丢失一些数据。这让我想知道你是否有两个问题。首先,对页面事件及其发生的顺序感到困惑,其次让您的自定义事件起作用。我们的 'Evil Greebo' 朋友是对的,更多的代码会帮助我们。
-
顺便说一句 - 请停止使用像“d”这样的变量名。您已经在两个地方定义了 d - 一次在页面级别,一次在您的按钮创建中 - 当您这样做时,代码变得非常难以遵循。让您的变量名称提供信息 - 告诉我们它们打算如何使用它们的名称。