2012-04-25 5 views
-1

На событии Click Button вы можете отключить эту кнопку, а также вызвать ее обработчик событий?Нажатие кнопки: отключение и выполнение обработчика кнопки

Я попытался это:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Button1.Enabled = false; 
} 

Это не работает в IE, Mozilla или Chrome.

+1

Пожалуйста, сделайте это на стороне клиента ** только **. – gdoron

+0

Измените свой вопрос, чтобы быть понятным, что именно вы хотите. Код, который вы разместили здесь, действительно отключит кнопку при возврате кода вместе с любым другим кодом, запущенным в этом методе. –

+0

Сделайте это с помощью JavaScript - это намного проще и основано на работе клиента, а не на сервере (что, если пользователи 1000/10000/100000 выполнили одно и то же действие?) –

ответ

-1
<asp:Button ... OnClientClick="disableButton(this);" /> 

<script type="text/javascript"> 
function disableButton(button) 
{ 
//need to delay a few ms so that the button posts back before being disabled 
    var buttonToDisable = button; 
    setTimeout("reallyDisableButton()"), 2); 
} 

function reallyDisableButton() 
{ 
    buttonToDisable.disabled = true; 
} 
</script> 

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

+0

... или покончить с необходимостью задержка, вы можете сначала отключить эту кнопку, затем вызвать '__doPostBack ('Button1', '');' самостоятельно, а затем 'e.preventDefault();', чтобы предотвратить исходную отправку. –

+0

@Scott Это не похоже на то, что пользователь увидит задержку; он кажется мгновенным для них. – Servy

+0

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

0

Вы можете попробовать добавить это:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Do some stuff here 

    Button1.Attributes.Add("onclick", "javascript:return false;"); 
    Button1.Enabled = false; 
} 
Смежные вопросы