[英]Intercept button click on page load
我需要编写一个代码,可以拦截某个按钮(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
}
}
按钮单击事件处理程序中的第一个参数是发送方。 您可以将该发件人强制转换为Button
对象,然后您应该能够识别基于该对象的按钮。 这样,您可以消除该功能以确定单击哪个。
void GreetingBtn_Click(Object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
if(clickedButton.Text == "bla")
{
//Do stuff
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.