Отключенная кнопка asp.net отключает проверку кнопки - PullRequest
2 голосов
/ 31 марта 2010

У меня есть страница aspx, которая содержит флажок и кнопку. Кнопка отключена по умолчанию, пока пользователь не установит флажок. Похоже, когда я добавляю атрибут enabled = "false" к кнопке, он удаляет проверку. Когда кнопка включена, я все еще хочу, чтобы проверка работала. Вот код и разметка для разных частей.

Checkbox:

<asp:CheckBox runat="server" ID="termsCheckBox" />
<label style="display: inline;">
I agree to the Terms & Conditions</label>

Кнопка:

<asp:Button runat="server" ID="registerButton" OnClick="registerButton_Click1" 
Text="Register" Enabled="false" ValidationGroup="accountValidation" />

JQuery:

<script type="text/javascript" language="javascript">
$(document).ready(function () {
    $('#<%=termsCheckBox.ClientID %>').click(function () {
        var checked = $(this).val();

        if (checked != undefined)
            $('#<%=registerButton.ClientID %>').removeAttr('disabled');
        else
            $('#<%=registerButton.ClientID %>').attr('disabled', 'disabled');
    });
});
</script>

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Asp.net глуп, потому что, когда элемент управления отключен, с ним не случится всякого рода вещи.

В этом случае код js, вызывающий проверку на стороне клиента, не будет создан для отключенной кнопки.

Если вы попытаетесь вручную добавить клиентский js-код из кода позади,

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    registerButton.OnClientClick = String.Format("javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('{0}', '', true, '', '', false, false))", registerButton.UniqueID)
End Sub

Это не будет работать, поскольку asp.net не будет отображать все атрибуты для отключенного элемента управления.

Тогда есть два решения. Либо отключите элемент управления с помощью JS на стороне клиента, либо добавьте JavaScript, чтобы выполнить обратную передачу с проверкой на стороне клиента.

Что я сделал для своей программы, так это добавил код для создания js-кода, чтобы отключить кнопку на стороне клиента:

    If btnSubmit.Enabled = False Then
        'Asp.net will not render all the attributes for a control that is disabled.  Even if you
        'try to set the OnClientClick attribute manually in code behind for the control, it will 
        'not work.  Asp.net will not render the attribute.  This is a workaround for this problem.
        btnSubmit.Enabled = True

        strJavaScript &= "btnSubmit.disabled = true;"

    End If

    ClientScript.RegisterStartupScript(Page.GetType(), "myStartupScript", strJavaScript, True)

Обратите внимание, что btnSubmit - это переменная javascript, которая уже определена в моем клиентском коде.

2 голосов
/ 31 марта 2010

Кажется, что проверка должна быть прикреплена к флажку, а не к кнопке.

0 голосов
/ 31 марта 2010

Я думаю, что это сработало бы, если бы вы включили / отключили кнопку на событии на стороне сервера checkBox, а не на стороне клиента, поскольку будет сгенерирован соответствующий код проверки на стороне клиента для запуска для ValidationGroup кнопки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...