Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 截取按钮点击页面加载_C#_Asp.net_C# 4.0_Delegates_Event Handling - Fatal编程技术网

C# 截取按钮点击页面加载

C# 截取按钮点击页面加载,c#,asp.net,c#-4.0,delegates,event-handling,C#,Asp.net,C# 4.0,Delegates,Event Handling,我需要编写一个代码,可以截获一些按钮(asp按钮)的点击,而不是执行一些代码,如果一个方法返回true,则调用原始的点击 因此,要点是: 1-我不知道如何保存原始点击 2-识别单击的按钮 void GreetingBtn_Click(Object sender, EventArgs e) { Button clickedButton = (Button)sender; if(clickedButton.Text == "bla") { //Do stuff

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

因此,要点是:

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

2-识别单击的按钮

void GreetingBtn_Click(Object sender, EventArgs e)
{
    Button clickedButton = (Button)sender;
    if(clickedButton.Text == "bla")
    {
        //Do stuff
    }
} 
例:

编辑:

好的,我设法得到了按钮谁做点击这样做…现在我需要防止原来的点击得到调用。下面的方法不起作用。即使将原始的单击覆盖到新的处理程序,也会调用并执行旧的处理程序。我希望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();
    }
我不知道这是否可能,但希望能得到一些帮助=/


谢谢。

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

void GreetingBtn_Click(Object sender, EventArgs e)
{
    Button clickedButton = (Button)sender;
    if(clickedButton.Text == "bla")
    {
        //Do stuff
    }
} 

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

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

为什么不让原始点击得到处理,并在第一行进行检查,看它是否应该继续执行或立即返回?
sender
是或应该是对[postback | click]事件发起人的引用。这意味着它应该是控件本身。不过,如前所述:为什么不适当地处理每个控件的单击事件呢?您仍然可以找出常见代码并保持其干燥。要点是:在到达原始单击事件之前停止单击。不要在“点击按钮”方法处理程序上添加一行。对。我知道。但我需要一种方法,在每个按钮上都应该这样做,并执行该功能。这些代码必须在幕后执行…在单击按钮被调用之前如果需要在单击操作被调用之前处理这些,那么应该连接一个javascript单击事件处理程序。然后,您可以使用Javascript执行逻辑,或者在服务器上执行Ajax请求以进行处理。如果您不想继续,请从单击处理程序返回false。嗯..这可能会起作用。但是需要一个额外的请求,我至少目前正在尝试避免。顺便说一句,谢谢它没有为按钮单击提供发件人控制