Link to home
Start Free TrialLog in
Avatar of phc_dev
phc_dev

asked on

I need to have one button fire the click event of a second button

I've pasted the code needed to try this below.

1) put two buttons on an asp.net web form. I'm using VS2008.
2) in the page load event, assign the button2 postbackurl to be another .aspx page in your project.
3) run the project, click on button2, and watch the page navigate to the other .aspx page (no problems here).
4) add a little code in the button1 click routine to fire the click routine of button2.
5) run the project, click on button1, and it does not navigate to the other .aspx page.
6) put some code in the button2 click rountine
7) run the project, click button1, and the code in button2 click is run, but the program does not navigate to the .aspx assigned to button2 postbackurl.

Question: How do I make button1 operate button2 as if I had clicked on button2 directly?

Eric



<asp:Button ID="btnBut1" runat="server" Text="Button 1" />
    <asp:Button ID="btnBut2" runat="server" Text="Button 2" />
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        btnBut2.PostBackUrl = "anypage.aspx"
    End Sub
 
    Protected Sub btnBut1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBut1.Click
        Dim t As Type = GetType(Button)
        Dim p As Object() = New Object(0) {}
        p(0) = EventArgs.Empty
        Dim m As MethodInfo = t.GetMethod("OnClick", BindingFlags.NonPublic Or BindingFlags.Instance)
        m.Invoke(btnBut2, p)
    End Sub
 
 
    Protected Sub btnBut2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBut2.Click
        Beep()
    End Sub

Open in new window

Avatar of apresto
apresto
Flag of Italy image

Shouldnt this :
m.Invoke(btnBut2, p)
be this:
m.Invoke(btnBut2_Click, p)
Apresto is right, make sure you use the exact subroutine name :)
Avatar of phc_dev
phc_dev

ASKER

with m.Invoke(btnBut2_Click, p), it is expecting an argument for sender and e, and using m.Invoke(btnBut2_Click(sender,e), p) produces a "Expression does not produce a value".  Remember, I am not necessarily trying to run the code with the _Click event, I am trying to get the PostBackURL of button2 to fire.
Thanks again,
Eric
Avatar of phc_dev

ASKER

the line above should read: "trying to run the code withIN the _Click event"
Hi there,
You can easily trigger the second button's click event, but the PostBackUrl will not be processed. The PostBackUrl is handled on the client-side in a onclick event on the button.

You can Response.Redirect using the PostBackUrl property. This is in C#.
protected void Page_Init(object sender, EventArgs e)
{
	Button2.PostBackUrl = "webform2.aspx";
}
 
protected void Button2_Click(object sender, EventArgs e)
{
	Response.Redirect(Button2.PostBackUrl);
}
 
protected void Button1_Click(object sender, EventArgs e)
{
	Button2_Click(sender, EventArgs.Empty);
}

Open in new window

If you don't need any server side code to run for button 1, then you can call button 2's client-side click event from button 1 to trigger the postback.
Avatar of phc_dev

ASKER

"If you don't need any server side code to run for button 1, then you can call button 2's client-side click event from button 1 to trigger the postback."
===================================

This is exactly what I need. Would you have an example of this for me?
Eric
ASKER CERTIFIED SOLUTION
Avatar of hehdaddy
hehdaddy

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of phc_dev

ASKER

Thanks all for the help.