Здесь есть два вопроса:
Отключение кнопки на стороне клиента предотвращает обратную передачу
Чтобы преодолеть это, отключите кнопку после события JavaScript onclick
. Самый простой способ сделать это - использовать setTimeout
, как предложено в этом ответе .
Кроме того, код OnClientClick
запускается даже в случае сбоя проверки ASP.NET, поэтому, возможно, стоит добавить проверку для Page_IsValid
. Это гарантирует, что кнопка не будет отключена в случае сбоя проверки.
OnClientClick="(function(button) { setTimeout(function () { if (Page_IsValid) button.disabled = true; }, 0); })(this);"
Лучше поместить весь этот код JavaScript в собственную функцию, как показывает вопрос:
OnClientClick="disable(this);"
function disable(button) {
setTimeout(function () {
if (Page_IsValid)
button.disabled = true;
}, 0);
}
Отключение кнопки на стороне клиента не отключает ее на стороне сервера
Чтобы преодолеть это, отключите кнопку на стороне сервера. Например, в обработчике события OnClick
:
OnClick="Button1_Click"
protected void Button1_Click(object sender, EventArgs e)
{
((Button)sender).Enabled = false;
}
Наконец, имейте в виду, что предотвращение дублирования нажатий кнопок не мешает двум разным пользователям одновременно отправлять одни и те же данные. Обязательно учитывайте это на стороне сервера.