2010-04-23 3 views
0

У меня есть кнопка asp.net, которая имеет событие click, которое в основном добавляет данные в datbase. У меня также есть radioobuttonlist (например, Approve/Decline) и текстовое поле. Если пользователь выбирает снижение, текстовое поле становится видимым. Я хочу запустить проверку того, что когда пользователь нажимает кнопку отправки, если выбрано отклонение, текстовое поле не может быть пустым. Для этого я использовал проверку jquery. когда я нажимаю кнопку, появляется сообщение рядом с текстовым полем, что поле требуется, но оно не останавливает выполнение кода позади. Т.е. он добавляет данные в базу данных. Вот мой код.Проверка JQuery не прекращает выполнение кода «code behind» asp.net button

<script type="text/javascript" language="javascript"> 



    $(function() { 
     $('#declinediv').hide(); 
     //////// 
     var $radBtn = $("table.rblist input:radio"); 
     $radBtn.click(function() { 
      var $radChecked = $(':radio:checked'); 
      var value = $radChecked.val(); 
      if (value == 'Decline' || value == 'Approve') { 
       if (value == 'Decline') 
        $('#declinediv').show(); 

       else 
        $('#declinediv').hide(); 
      } 
      else { 
       $('#declinediv').hide(); 
      } 

     }); 
     ////////////////////////// 

     $("#aspnetForm").validate({ 
      rules: { 
       <%=txtdeclinereason.UniqueID %>: { 
        minlength: 2, 
        required: true 
       } 
     }, messages: { 
      <%=txtdeclinereason.UniqueID %>:{ 
        required: "* Required Field *", 
        minlength: "* Please enter atleast 2 characters *" 
       } 
     }, onsubmit: true 


    }); 

    ////////////////////////////////// 

    $('#btnsubmit').click(function(evt){ 
     var isValid = $("#aspnetForm").valid(); 

     if (!isValid) 
     { 
      evt.preventDefault(); 
      } 
    }); 





}); 

    function myredirect(v, m, f) { 
     window.location.href = v; 
    } 

</script> 


<table style="border: 1px black solid; text-align: center; vertical-align: middle" 
    width="100%"> 
    <tr> 
     <td> 
      <asp:RadioButtonList ID="rbtnlstapprover" runat="server" RepeatDirection="Horizontal" 
       CssClass="rblist" DataTextField="username" DataValueField="emailaddress"> 
       <asp:ListItem Text="Approve" Value="Approve" /> 
       <asp:ListItem Text="Decline" Value="Decline" /> 
      </asp:RadioButtonList> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="rbtnlstapprover" 
       Text="*" ErrorMessage="Please select atleast one Approver" ValidationGroup="approvalgroup" 
       Display="Dynamic" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <div id="declinediv"> 
       <asp:TextBox ID="txtdeclinereason" runat="server" TextMode="MultiLine" Columns="80" 
        Rows="5" /> 
      </div> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton" 
       CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" /> 
     </td> 
    </tr> 
</table> 

Как остановить выполнение кода позади? Спасибо за вашу помощь.

Edit:

я смог исправить probelm, добавив OnClientClick событие для кнопки

if ($('#declinediv').is(':visible')) 
{ 

    var isValid = $("#aspnetForm").valid(); 
    alert(isValid); 

    if (isValid) 
     return true; 
    else 
     return false; 

} 
else 
{ 
    return true; 
} 

ответ

3

Установите свойство OnClientClick на свою функцию javascript для проверки. Если это не подтверждается, ваша функция javascript вернет false, и страница не будет отправляться обратно.

<asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton" 
       CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" OnClientClick="return(jsValidate());" /> 
+0

OnClientClick - это единственный способ попасть между кнопкой и ее сообщением. Даже если держать заложник form.submit(), вы не будете хорошо работать в IE. – DevelopingChris

+0

Thanks.It работает. Я получаю сообщение об ошибке рядом с текстовым полем. Есть ли способ, который сообщение об ошибке может появиться с помощью диалога ui? – shahk26

0

Вы уверены, что это проверка пихты всех? Поставьте «debbuger» в оператор if. Я думаю, вам нужно использовать ClientId не UniuqueId.

0

Функция, обрабатывающая кнопку отправки, должна возвращать значение true, если проверка прошла, и false, если проверка не выполнена.
Я не уверен, что код там прикрепляет другой обработчик события или заменяет его. ЕСЛИ обработчик событий подключен и оба события срабатывают с помощью jquery magic, просто возврат false может не работать.

Также вы говорите, что записи все еще добавляются в базу данных. Это означает, что у вас нет проверки на стороне сервера, поддерживающей вашу проверку на стороне клиента. Любые проверки валидатора jquery можно обойти, чтобы вы снова должны были проверить сервер.

1

OnClick не будет выполнять код позади, не до OnClientClick возвращается истинных ...

если проверка является ложным, OnClientClick = "(return(validationfunction());" возвратит ложные и постбэк остановится.