asp.net OnClientClick не отображается для изначально отключенной кнопки

#c# #javascript #asp.net

#c# #javascript #asp.net

Вопрос:

У меня отключен asp.Button, который я включу позже с помощью JavaScript. Вот так

 <asp:Button ID="btnSave" runat="server" Text="Save" Enabled="false" OnClientClick="; return ValidateFields();" OnClick="btnSave_Clicked" />
  

Однако метод «onclick» не отображается как html, когда элемент управления отключен. Моя работа заключается в добавлении следующего кода в PageLoad.

 btnSave.Attributes["onclick"] = "return ValidateFields();";
  

Есть ли более удобное решение для этого?

Спасибо

Ответ №1:

Вы можете использовать атрибут html для отключенной

 <asp:Button disabled="disabled" ID="btnSave" runat="server" Text="Save" Enabled="false" OnClientClick="; return ValidateFields();" OnClick="btnSave_Clicked" />
  

Я предполагаю, что затем вы включаете ее на стороне клиента? если это так, вы можете включить это с помощью :

 document.getElementById('MainContent_btnSave').removeAttribute('disabled'); //or jquery alternative where MainContent_btnSave is the clientid of the control
  

Комментарии:

1. да, я включаю кнопку на стороне клиента, изменяя отключенное значение. Спасибо за предложение. Это работает.

Ответ №2:

Что ж, очевидно, почему фреймворк ведет себя так: если кнопка отключена, почему у нее должен быть onclick обработчик событий? Пользователь не может щелкнуть по ней, если она отключена! Из-за этого фреймворк удаляет атрибут.

Итак, я не думаю, что у вас есть другие варианты, кроме добавления атрибута вручную.

Комментарии:

1. Действительно забавно…. этот подход, похоже, игнорирует, что что-то происходит и на стороне клиента. Ну что ж!

2. MS должна была предоставить нам лучшие варианты — например, Disabled =»» и Enabled = «»», потому что оба они совершенно разные.

3. Было бы неплохо, если бы Visual Studio хотя бы выдала предупреждение в этом случае. «Ваш OnClientClick будет проигнорирован, потому что вы установили Enabled =’false'».