Отключите событие нажатия динамической кнопки asp.net во время обратной передачи и включите его впоследствии

Я динамически создаю кнопку в своем коде и прикрепляю к ней событие щелчка. Однако я должен запретить людям щелкать по нему, пока идет процесс. Поэтому, когда он щелкнут один раз, он должен быть отключен, а когда процесс завершится, он должен быть включен. Как я могу это сделать?

Спасибо.


person stckvrflw    schedule 28.01.2010    source источник


Ответы (3)


onclick="this.enabled=false" добавьте это из своего кода в свой контроль

btnAdd.Attributes.Add("onclick", "this.enabled=false;");

Эта ссылка подробно объясняет http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

person Ravia    schedule 28.01.2010
comment
если вы имеете в виду mybutton.onlick = this.enabled=false, то для него не определен метод onlick. - person stckvrflw; 28.01.2010
comment
это будет событие на стороне клиента, запускаемое после нажатия кнопки, если вы хотите отключить его на стороне сервера, это легко сделать btnAdd.Enabled = false; - person Ravia; 28.01.2010

Если вы обрабатываете через ajax при нажатии кнопки - 1. Отключить кнопку при запуске обработки 2. Включить кнопку после завершения обработки

Если кнопка выполняет обратную передачу, лучший способ — отключить кнопку при ее нажатии с помощью javascript [я не буду предлагать jquery только для этой конкретной задачи]. Так как после постбэка кнопка будет включена, как и раньше, вам не нужно беспокоиться о включении.

    <asp:Button ID="btn" runat="server" OnClientClick="disable(this)"
Text="Click me!" OnClick="btn_Click" />

 <script type="text/javascript">
        function disable(control)
        {
            control.disabled="disabled";
            //added alert to give the snapshot of what happens
            //when the button is clicked
            alert(100);
        }
 </script>

Надеюсь это поможет.

person sangam    schedule 28.01.2010
comment
и как он снова включится после завершения обратной передачи? - person stckvrflw; 28.01.2010
comment
Я пишу свой код, похожий на ваш. Все то же самое, но теперь OnClick=btn_Click не срабатывает. Если я удалю OnClientClick =disable(this), тогда OnClick сработает. Что вы думаете ? - person stckvrflw; 28.01.2010
comment
После обратной передачи вы можете зарегистрировать скрипт с clientscript на C#, который удаляет свойство disabled кнопки. - person sangam; 26.08.2011
comment
Да, теперь это решение работает: dotnetspidor.blogspot.com/2010/01/. Я хотел бы отредактировать свой ответ, но это не будет хорошо. Пусть будет недостаток, чтобы программисты видели эволюцию. - person sangam; 29.09.2011

Я бы использовал UpdatePanel вокруг кнопки. При нажатии вы можете отключить кнопку на стороне сервера. Используйте триггер на панели обновлений, который проверяет каждые x секунд, если ваш внешний процесс вернул результат. И я бы посоветовал вам перевести длительные процессы в службу Windows.

person citronas    schedule 28.01.2010