2010-04-23 11 views
0

我有一個asp.net按鈕,它具有基本上將數據添加到數據庫的單擊事件。我也有一個單選按鈕(即批准/拒絕)和一個文本框。如果用戶選擇拒絕,文本框變得可見。我想運行驗證,當用戶單擊提交按鈕時,如果選擇了拒絕,那麼文本框不能爲空。我已經使用jQuery驗證。當我點擊按鈕時,文本框旁邊的消息應用程序需要該字段,但它不會停止執行後面的代碼。即它將數據添加到數據庫中。這是我的代碼。jquery驗證不會停止執行「code behind」代碼的asp.net按鈕

<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> 

如何停止執行代碼?謝謝你的幫助。

編輯:

我能夠通過添加的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 2010-04-23 13:42:21

+0

Thanks.It工程。我在文本框旁邊收到錯誤消息。有沒有任何方式可以使用對話框ui彈出錯誤消息? – shahk26 2010-04-23 18:31:32

0

你肯定是驗證所有的冷杉固定萬阿英,蔣達清?在if語句中加入一個「debbuger」。我認爲你需要使用ClientId而不是UniuqueId。

0

處理提交按鈕的函數應該在驗證通過時返回true,如果驗證失敗則返回false。
我不確定那裏的代碼是否附加了另一個事件處理程序或將其替換。如果只附加了事件處理函數,並且這兩個事件都是用jquery魔法激發的,那麼僅僅返回false可能不起作用。

您還在說記錄仍然被添加到數據庫中。這意味着您沒有備份客戶端驗證的服務器端驗證。任何jquery驗證器都可以被繞過,所以你應該確保在服務器上再次檢查。

1

OnClick不會落後執行代碼,直到OnClientClick回報真正 ...

如果驗證是假的,OnClientClick = "(return(validationfunction());"將返回和回傳將停止。