不是按钮触发的事件

时间:2011-06-15 14:33:06

标签: c# asp.net events

我生成了两个按钮并将它们放入按钮列表中。

       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方法中设置了一个断点,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();
        }
    }

6 个答案:

答案 0 :(得分:2)

您确定使用的是正确的活动吗?你不应该使用Button.Click吗?

答案 1 :(得分:2)

pgs.Command += obtainTopicsPerPage_Click;应为pgs.Command += new CommandEventHandler(obtainTopicsPerPage_Click);

您未正确添加命令处理程序new CommandEventHandler(obtainTopicsPerPage_Click);

编辑:由于您要添加动态控件,因此在页面加载时应再次执行代码以触发事件。

答案 2 :(得分:1)

使用Command没有任何问题。

在新页面上尝试此操作作为起点,您应该看到Button1_Command事件抛出预期的异常。我当然这样做:)。

    protected void Page_Load(object sender, EventArgs e)
    {
        Button pgs = new Button();
        pgs.Command += Button1_Command;
        Controls.Add(pgs);
    }

    void Button1_Command(object sender, CommandEventArgs e)
    {
        throw new NotImplementedException();
    }

我怀疑代码中的其他地方存在问题但我们没有看到。请告诉我们更多与按钮等相关的代码。

顺便说一句,是的,它确实编译并运行(虽然我忘记了form1引用;)) Good grief...

答案 3 :(得分:0)

你在哪里创建按钮?这可能是错误的地方。见这里:http://msdn.microsoft.com/en-us/library/ms178472.aspx

根据文档建议,在PreInit中试用。

答案 4 :(得分:0)

继续其他海报所说的话。

您可以尝试以下方法:

pgs.Click += obtainTopicsPerPage_Click;

确保设置代码在PreInit或PreRender事件中。

答案 5 :(得分:0)

这适合我,希望能给你一个想法。我知道它非常简单,但是从你提供的内容开始。当您单击按钮时,页面重新加载,因此重新创建按钮并再次设置所有内容。为了避免这种情况发生,请检查Page.IsPostBack是否为假。

public partial class GuessNumber : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        lblResult.Text += "Written in by Page_Load <br />";
    }


    protected void LoveMyButtons_click(object sender, EventArgs e) {
        string response = txtGuess.Text;

        lblResult.Text += string.Format("LoveMybuttons " + response + " <br />");
    }

    protected void Page_PreInit(object sender, EventArgs e) {
        CreateButtons();
    }


    List<Button> btns;
    public void CreateButtons() {

        btns = new List<Button>();

        for (int i = 0; i < 6; i++) {
            Button butt = new Button();
            butt.Text = "Click me";
            butt.Click += LoveMyButtons_click;
            btns.Add(butt);

        }
        AddMyButtonsToAPlaceHolder();
    }

    public void AddMyButtonsToAPlaceHolder() {
        foreach (var item in btns) {
            plhButtonStore.Controls.Add(item);
        }

    }

}




<body>
<form id="form1" runat="server">
<div>
    <asp:TextBox ID="txtGuess" runat="server" />
    <asp:Button ID="btnPeanut" runat="server" Text="Guess" />

    <br /><br />
    <asp:Label ID="lblNumberOfGuesses" runat="server" />
    <br />
    <asp:Label ID="lblResult" runat="server" />
    <br />
    <asp:PlaceHolder ID="plhButtonStore" runat="server" />
</div>
</form>
</body>
相关问题