我需要编写一个可以拦截单击某个按钮(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();
}
我不知道它是否可能,但希望能得到一些帮助 =/
谢谢。