Určitě bych doporučoval použít unobtrusive řešení, tedy takové, které nějakým skriptem aplikujete globálnbě pro celou aplikaci (s možností ho lokálně vypnout). Do masterpage přidejte referenci na jQuery a třeba tento skript (samozřejmě si ho upravte, tohle je jen příklad):
$(document).ready(function () {
$("input[type=button]:not('[data-double-submit=no]')").live("click", function () {
if ($(this).data("double-submit-clicked")) return false; // pokud už na tlačítko bylo kliknuto, zamítnout to
$(this).data("double-submit-clicked") = true;
});
});
Sys.Application.add_load(function () {
// po dokončení AJAX postbacku přes UpdatePanel vynulovat tlačítkům příznak double-submit-clicked
$("input[type=button]:not('[data-double-submit=no]')").data("double-submit-clicked", false);
});
Píšu to z hlavy, takže možná tam bude nějaká bota. Princip spočívá v tom, že vezmeme všechna tlačítka ve stránce (live bude fungovat i na ta, která dynamicky přidáme později, např. přes update panel), vynecháme ta, která mají atribut data-double-submit="no" a pokud na ně klikneme, přidáme si přes jQuery funkci data příznak, že se na tlačítko kliknulo. Pokud už tam ten příznak je, vrátíme false, což kliknutí na tlačítko zamítne a nestane se nic. Pokud se dokončí AJAX postback, potřebujeme, aby na tlačítka šlo klikat dál, v klientské události load tedy příznak u všech tlačítek vynulujeme.
|