c# - 拦截按钮点击页面加载

标签 c# asp.net c#-4.0 delegates event-handling

我需要编写一段代码来拦截某些按钮(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();
    }

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

谢谢。

最佳答案

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

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
    }
  }

关于c# - 拦截按钮点击页面加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11747915/

相关文章:

asp.net - 当前的配置系统不支持用户范围的设置

multithreading - 并行收集处理的应用程序设计

c# - Windows 8 - 花哨的进度条 API?

c# - 如何指定处理器关联性?

c# - 比较 byte[] 和 T

c# - C# 中的 const 和 readonly 有什么区别?

asp.net - 在 Response.RedirectToRoute 之后跳过页面执行的正确方法

c# - Web.Optimizations - 有什么方法可以从 Style/Script Bundle 中获取所有内容?

excel - 我们如何使用 closedxml 在 excel 中创建图表

c# - 无法在文件中写入AppedText