いくつかのコードを実行するよりも、いくつかのボタン (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();
}
可能かどうかはわかりませんが、助けていただければ幸いです=/
ありがとう。