none
Button Enable RRS feed

  • Вопрос

  • Здравствуйте!

    Есть GridView и в нем колонка несвязанных CheckBox. Есть также  Button и LinkButton вне GridView. Их нормальное состояние Enable = False. Когда я помечаю хотя бы один из CheckBox колонки, состояние Button и LinkButton  должно меняться на Enable = True. Можно ли это сделать при помощи javascript ?

    Я могу идентифицировать контролы в javascript :

    var myButton = document.getElementById("<%=ButtonId.ClientID %>");

    var myLinkButton = document.getElementById("<%=LinkButtonId.ClientID %>");

    А дальше как?

    Заранее спасибо

    21 сентября 2013 г. 17:27

Ответы

  • Так примерно:

    <script type="text/javascript">
                var myButton = document.getElementById("<%=Button1.ClientID %>");
                var myLinkButton = document.getElementById("<%=LinkButton1.ClientID %>");
                myButton.removeAttribute("disabled");
                myLinkButton.setAttribute("href", "URL");
    </script>


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа kgnalex 23 сентября 2013 г. 16:20
    21 сентября 2013 г. 18:40
    Модератор

Все ответы

  • Так примерно:

    <script type="text/javascript">
                var myButton = document.getElementById("<%=Button1.ClientID %>");
                var myLinkButton = document.getElementById("<%=LinkButton1.ClientID %>");
                myButton.removeAttribute("disabled");
                myLinkButton.setAttribute("href", "URL");
    </script>


    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа kgnalex 23 сентября 2013 г. 16:20
    21 сентября 2013 г. 18:40
    Модератор
  • Спасибо, работает
    23 сентября 2013 г. 16:21

  • Я поторопился. Для Button - работает, а для  LinkButton -нет. Скажите, а в javascript есть какой-то метод, типа отладки, позволяющий отследить поведение переменной (ее атрибуты, образуется ли она и т.д.), в данном случае myLinkButton ?
    24 сентября 2013 г. 12:53
  • Для LinkButton вам надо вставить действительный URL.

    "Скажите, а в javascript есть какой-то метод, типа отладки, позволяющий отследить поведение переменной" - вы можете проследить это в отладчике (IE, Firebug).


    Сделаем содержимое сообщества лучше, вместе!

    24 сентября 2013 г. 13:55
    Модератор
  • Дело в том, что я использую LinkButton, как простые Button, т.е. мне не важен переход по URL, а обработка нажатия в CodeBehind (функция Protected Sub MyButton_Click(ByVal sender As Object, ByVal e As System.EventArgs), поэтому у меня нет реального URL. Я пробовал с LinkButton поступить, как с Button - но не получилось. Также пытался применить

    myLinkButton.attr("disabled", false);

    myLinkButton.setattributes("disabled", false);- то же самое

    24 сентября 2013 г. 17:30
  • Тогда почему бы не использовать обычную кнопку? Или у вас проблемы с серверной валидацией событий?

    Сделаем содержимое сообщества лучше, вместе!

    24 сентября 2013 г. 19:39
    Модератор
  • Чисто эстетически мне больше подходит LinkButton, да и  более вид современный - см. почту типа Yandex.ru или Mail.ru - там верхний ряд кнопок, по-моему, это LinkButton
    24 сентября 2013 г. 19:43
  • Можно хаком, примерно так:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="WebApplication.WebForm" 
      EnableEventValidation="false" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
      <script src="https://rawgithub.com/mrdoob/three.js/master/build/three.js" type="text/javascript"></script>
    </head>
    <body>
      <form id="form1" runat="server">
        <div>
          <asp:LinkButton ID="LinkButton1" runat="server" Enabled="False" OnClick="LinkButton1_Click" 
            EnableViewState="false">LinkButton</asp:LinkButton>
          <asp:LinkButton ID="LinkButton2" runat="server" Enabled="True" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
          <script type="text/javascript">
            var myLinkButton = document.getElementById("<%=LinkButton1.ClientID%>");
            myLinkButton.setAttribute("href", "javascript:__doPostBack('<%=LinkButton1.ClientID%>', '')");
            myLinkButton.removeAttribute("class");
          </script>
        </div>
      </form>
    </body>
    </html>
    namespace WebApplication
    {
      public partial class WebForm : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
    
        }
      }
    }
    Но это плохой вариант. Придётся отключить валидацию событий, так как котрол был отключён на сервере. А это плохо, с точки зрения безопасности.


    Сделаем содержимое сообщества лучше, вместе!

    26 сентября 2013 г. 6:02
    Модератор
  • Вы не могли бы подробнее рассказать (или дать ссылку) что такое "серверная валидация событий", и почему плохо, когда она отключается
    27 сентября 2013 г. 10:12
  • Прочтите например здесь, в MSDN. "и почему плохо, когда она отключается" - плохо в плане безопасности. Страница начнёт "глотать" события которые могли быть сгенерированы элементами, например вставленными не для благих намерений.

    Сделаем содержимое сообщества лучше, вместе!

    28 сентября 2013 г. 19:47
    Модератор