如何在Page_Load中添加EventHandle _NOT_

时间:2011-06-21 17:20:57

标签: c# asp.net event-handling

我在Page_LoadComplete上制作动态表,我无法在Page_Load中进行,因为在事件处理过程中可以更改数据,所以在Page_LoadComplete我做了一些按钮并想要添加它们EventHandler:

protected void Page_LoadComplete(object sender, EventArgs e) {
   btn.Click += new EventHandler(b_Click);
}

但它不起作用,如何将事件添加到按钮而不是在Page_Load?


简单,甚至不是动态代码:

void b_Click(object sender, EventArgs e) {
Label1.Text = "!!!";
}
protected void Page_Load(object sender, EventArgs e) {
Button1.Click += new EventHandler(b_Click);
}
Page_Load上的

工作正常。

protected void Page_LoadComplete(object sender, EventArgs e) {
Button1.Click += new EventHandler(b_Click);
}
Page_LoadComplete上的

什么都不做。

3 个答案:

答案 0 :(得分:0)

问题是回发时控件不存在(因为您在运行时创建了它)。在Init中创建控件应解决此问题,并允许触发事件。如果您愿意,可以在LoadComplete中更改所有属性,但此时按钮需要存在。

答案 1 :(得分:0)

您尝试的内容永远不会有效,因为每次页面重新加载时都必须重新添加动态添加的控件。

由于您的控件填充基于表单中使用的数据,您应该将所有控件创建逻辑放在一个函数中,并在事件处理程序中,设置数据然后调用控件创建逻辑函数,而在页面加载你必须调用控件创建函数(假设你已经在调用之间保持数据),以便重新创建第一个创建的所有控件。然后,一旦他们被重新创建,他们就可以回应他们解雇的事件。

答案 2 :(得分:0)

好的,这是一个例子: 给出这个html片段:

<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button runat="server" Text="Click Me" OnClick="go_" />
    </div>
    </form>
</body>

public partial class WebForm1 : System.Web.UI.Page
{
    public int ControlCount
    {
        get { return ViewState["Controls"] == null ? 0 : (int)ViewState["Controls"]; }
        set { ViewState.Add("Controls", value); }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        for(int i = 0; i < ControlCount; i++)
        {
            Button b = new Button();
            b.Click += btn_Click;
            b.Text = "Hi";
            form1.Controls.Add(b);
        }
    }

    void btn_Click(object sender, EventArgs e)
    {
        ((Button)sender).Text = "bye";
    }

    protected void go_(object sender, EventArgs e)
    {
        Button btn = new Button();
        btn.Text = "Hi";
        form1.Controls.Add(btn);
        btn.Click += new EventHandler(btn_Click);
        ControlCount++;
    }
}

每次单击第一个按钮时,新的按钮将被添加到页面中,文本为“Hi”,每次单击“Hi”按钮时,THAT按钮的文本将变为“Bye”

这是有效的,因为我添加了两次控件。一旦进入主按钮的事件处理程序,我确定我需要一个新控件,然后在OnLoad中再次有一个新的空页面,但现在我知道(通过ControlCount)我添加了多少控件。 / p>