Search code examples
c#sharepoint-2010submit-button

Why is my button's click event not firing?


I have two Buttons on my Sharepoint 2010 Web Page. One fires (server-side), the other doesn't*. They are set up similarly. Here is the one that does fire:

Button btnSave = new Button();
btnSave.Text = "Save";
btnSave.Click += new EventHandler(btnSave_Click);
this.Controls.Add(btnSave);
. . .
private void btnSave_Click(object sender, EventArgs e)
{
    LiteralControl message = null; // this breakpoint is hit, sho' nuff
. . . // code elided for brevity
}

...and here is the one that isn't invoked:

Button btnGeneratePDF = null;
. . .
btnGeneratePDF = new Button();
btnGeneratePDF.Text = "Generate PDF";
btnGeneratePDF.UseSubmitBehavior = true; // trying this after it didn't work without it... (still doesn't work)
btnGeneratePDF.Click += new EventHandler(btnGenPDF_Click);
this.Controls.Add(btnGeneratePDF);

private void btnGenPDF_Click(object sender, EventArgs e)
{
        GeneratePDF(listOfListItems); // breakpoint here never reached
}        

Why is btnSave's handler invoked when I click it, but btnGeneratePDF's handler is not?

  • I can get buttons to fire client-side (jQuery) by using HtmlButtons, but I need this one to fire server-side/C#.

UPDATE

Would the fact that I'm creating the pdfgen button inside the click handler of the other Button have anything to do with this? Here's the significant part of that:

private void btnSave_Click(object sender, EventArgs e)
{
    try
    {
        . . . relatively insignificant code elided for brevity
        Button btnGeneratePDF = new Button();
        btnGeneratePDF.Text = "Generate PDF";
        btnGeneratePDF.UseSubmitBehavior = true; // trying this after it didn't 
    work without it...still doesn't work; don't know why - configuration of this 
    button is the same as for btnSave
        btnGeneratePDF.Click += new EventHandler(btnGenPDF_Click);
        this.Controls.Add(btnGeneratePDF);
        . . . relatively insignificant code elided for brevity

?

UPDATE 2

Only the first (btnSave) button (and not the identically-created btnGeneratePDF button) is marked as type="submit":

<input type="submit" name="ctl00$ctl24$g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33$ctl00$ctl152" value="Save" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ctl24$g_5f3fedca_19f7_4bc3_b84e_efbef0c48a33$ctl00$ctl152&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" />

I believe only one button of type submit is allowed, but I tried to shove btnSave out of the way when I was done with it by setting its Enabled property to false, but that did nothing (good).


Solution

  • You must recreate the dynamic control in page processing. Here is an example of how to do it:

    protected void Page_Load(object sender, EventArgs e)
        {
            Button b = new Button();
            b.ID = "one";
            b.Text = "one";
            b.Click += B_Click;
            this.form1.Controls.Add(b);
    
            // this is where the dynamic control is created if id is in postback
            if (Request["two"] != null)
            {
                Button x = new Button();
                x.ID = "two";
                x.Text = "two";
                x.Click += X_Click;
                this.form1.Controls.Add(x);
            }
        }
    
        private void B_Click(object sender, EventArgs e)
        {
            Button x = new Button();
            x.ID = "two";
            x.Text = "two";
            x.Click += X_Click;
            this.form1.Controls.Add(x);
            LabelOutput.Text += " ...one";
    
        }
    
        private void X_Click(object sender, EventArgs e)
        {
            LabelOutput.Text += " ...two";
        }