3

我需要编写一个可以拦截单击某个按钮(asp按钮)而不是执行某些代码的代码,如果方法返回true,则调用原始单击。

所以要点是:

1-我不知道如何保存原始点击。

2- 识别被点击的按钮。

前任:

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

        var originalClick = b.Click;

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

编辑:

好的,设法让单击的按钮执行此操作...现在我需要防止原始的单击被调用。下面的方法没有奏效。即使将原始点击覆盖到新的处理程序,旧的处理程序也会被调用并执行。我的东西 ASP.NET 读取它并制作类似于事件调用堆栈的东西来被调用。即使处理程序更改旧的仍然在堆栈中。

    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();
    }

我不知道它是否可能,但希望能得到一些帮助 =/

谢谢。

4

2 回答 2

6

要获取控件名称,您可以在页面加载中尝试以下操作:

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
    }
  }
于 2012-07-31T20:05:39.210 回答
0

按钮单击事件处理程序中的第一个参数是发送者。您可以将该发件人转换为Button对象,然后您应该能够识别基于该对象的按钮。这样,您就可以消除使用该功能来确定哪个被点击了。

void GreetingBtn_Click(Object sender, EventArgs e)
{
    Button clickedButton = (Button)sender;
    if(clickedButton.Text == "bla")
    {
        //Do stuff
    }
} 
于 2012-07-31T19:58:16.850 回答