Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Intercept button click on page load

I need to write a code that can intercept a click of some button (asp button) than execute some code, and if a method return true, call the original click.

So the points are:

1- I don´t know how to save the original click.

2- Identify the button that was clicked.

Ex:

    protected void Page_Load(object sender, EventArgs e)
    {
        var b = getButtonThatWasClicked();

        var originalClick = b.Click;

        if(callSomeMethod(b))
            originalClick(null,null);
    }

EDIT:

Ok managed to get the button who made the click doing this...Now i need to prevent the original Click to get called. The method bellow didn't worked. Even overriding the original click to a new Handler the old Handler got called and executed. I thing ASP.NET read it and make something like a call stack of events to get called.Even if the handler change the old still in the stack.

    public void ButtonsTestMethod()
    {
        var listOfButtons = listaDeBotes.Where(b => b.CommandName != "");

        foreach (var button in listOfButtons)
        {
            if (Request.Form[button.UniqueID] != null)
            {
                var buttonFromRequest = Request.Form[button.UniqueID];
                if (buttonFromRequest == null)
                    continue;

                if (button.CommandName != "xxx")
                { 
                    //validate things
                    //if(TemPermissao(Tela,GetAcaoDoBotao(botao.CommandName)))
                    //if(!canexecuteSomething())
                    button.Click += new EventHandler(defaultClick);   
                }
            }
        }
    }

    void defaultClick(object sender, EventArgs e)
    {
        //show error
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        //other code
        ButtonsTestMethod();
    }

I don´t know if its possible but would appreciate some help =/

Thanks.

like image 251
Alan Araya Avatar asked Mar 27 '26 23:03

Alan Araya


1 Answers

To get the control name, you can try the following in the page load:

protected void Page_Load(object sender, EventArgs e)
 {
    if( IsPostBack ) 
    {
        string senderControl = Request.Params["__EVENTTARGET"].ToString();
        //senderControl will contain the name of the button/control responsible for PostBack
    }
  }
like image 140
Habib Avatar answered Mar 29 '26 14:03

Habib



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!