2010-03-31 2 views
2

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

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> 

ответ

0

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

+0

Клиент работает отлично. Мне не нужна поездка на сервер, чтобы включить кнопку. – Xaisoft

+0

Я хочу, чтобы кнопка asp.net была частью проверки ValidationGroup, выполняемой инфраструктурой .Net, вам нужно сделать обратную передачу на сервер, чтобы убедиться, что сценарий должен быть прикреплен кнопкой к обработчику на клиенте , Если у вас есть пользовательский скрипт на клиенте, вам нужно будет убедиться, что он был прикреплен к клиенту событие нажатия кнопки, чтобы уволить ... если я не пропустил что-то – Sunny

+0

Хорошо, я думаю, что я правильно понял. Вы говорите это, потому что я передаю его на стороне клиента и не делаю сообщение назад, проверка для кнопки не обрабатывается, потому что ее сценарий не добавляется, когда он включен. – Xaisoft

2

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

+0

Я пробовал поставить проверку на флажок, и я получил сообщение об ошибке , в котором указано, что элемент управления ControlToValidate недействителен для флажка. – Xaisoft

+0

Какой тип валидатора вы использовали - я не вижу его в коде, который вы отправили – Ray

+0

Я использую все виды, Compare, Requried, RegularExpression – Xaisoft

2

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

В этом случае код 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 является Java-переменная, которая уже определена в моей стороне клиента кода ,

Смежные вопросы