2012-11-24 63 views
1

的.aspxasp.net禁用按鈕點擊後,同時保持的CausesValidation和一個onclick法

<asp:TextBox ID="txtInvite" Width="170px" Height="20px" runat="server" 
          Font-Size="Small" ></asp:TextBox> 

          <AjaxToolkit:TextBoxWatermarkExtender ID="tbexInvite" 
          runat="server" SkinID="skinTextBoxWatermarkExtender" 
          TargetControlID="txtInvite" WatermarkText="Email"></AjaxToolkit:TextBoxWatermarkExtender> 

          <asp:RequiredFieldValidator ID="rfvInvite" runat="server" 
          Display="None" ValidationGroup="Inivitation" SetFocusOnError="true" 
          ControlToValidate="txtInvite" ErrorMessage="Enter Email."></asp:RequiredFieldValidator> 

          <asp:RegularExpressionValidator ID="regExpInvite" runat="server" 
          Display="None" ValidationGroup="Inivitation" SetFocusOnError="true" 
          ValidationExpression="\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*" 
          ControlToValidate="txtInvite" ErrorMessage="Invalid Email Format."></asp:RegularExpressionValidator> 

<div class="ButtonLogin" style="margin-top:-27px;margin-right:143px;_margin-right:105px;"> 
         <asp:UpdatePanel ID="UpdatePanel1" runat="server" > 
          <ContentTemplate> 
          <asp:Button ID="btnInvite" runat="server" CssClass="cssLoginButton blue" Text="Invite" ToolTip="Invite" ValidationGroup="Inivitation" CausesValidation="true" onclick="btnInvite_Click" /> 

          </ContentTemplate> 
         </asp:UpdatePanel> 
       </div> 
         <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="0"> 
          <ProgressTemplate> 
            <asp:Image ID="Image1" ImageUrl="~/App_Themes/Lifetrons/images/progressbar.gif" AlternateText="Processing" runat="server" /> 
          </ProgressTemplate> 
         </asp:UpdateProgress> 

的Page_Load代碼

.CS

this.btnInvite.Attributes.Add("onclick", "this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(this.btnInvite, "").ToString()); 

我想禁用點擊它後保持驗證和Onlick方法。我參考this question我的問題是一樣的這個問題,但我還沒有解決我的問題。我該如何解決?

+0

您是否嘗試過重寫'OnLoad'? –

+0

@SergeBelov是我試過 –

回答

4

有沒有必要搞亂你的代碼隱藏Page_Load事件。在您的按鈕控制,只需添加以下代碼片段:

OnClientClick="if(Page_ClientValidate('Inivitation')){this.disabled=true;}" 

讓你的按鈕看起來像

<asp:Button ID="btnInvite" runat="server" CssClass="cssLoginButton blue" Text="Invite" 
ToolTip="Invite" ValidationGroup="Inivitation" CausesValidation="true" 
onclick="btnInvite_Click" OnClientClick="if(Page_ClientValidate('Inivitation')){this.disabled=true;}" /> 
+0

其實我有兩個用戶控制頁面,即登錄頁面上的**。ascx **。首先是** Login.ascx **,另一個是** Invitation.ascx **。登錄頁面包含兩個帶驗證的文本框,一個登錄按鈕和Invitation頁面包含一個帶驗證的文本框,一個邀請按鈕。根據您的建議更改我的代碼。如果我點擊登錄按鈕,它顯示驗證邀請文本框,或者如果我點擊按鈕邀請它顯示登錄頁面的驗證。我怎麼解決這個問題? –

+0

您需要將Page_ClientValidate內部的內容更改爲正確的ValidationGroup。 我給出的代碼是基於你的邀請按鈕。您的登錄按鈕的驗證組是什麼? –

+0

感謝您的重播我已經更改了該頁面的驗證組。驗證組是**用戶登錄** –

0

您應該可以使用Button_Click方法禁用該按鈕。讓你的第一行是這樣的:

Button.Enabled = False; 

雖然這個方法有問題。如果頁面加載速度過快或代碼凍結,則不會正確禁用該按鈕。請記住,如果驗證失敗或超時,請在方法末尾重新啓用該按鈕。

您可能嘗試的另一種方法是使用CSS隱藏它。我對此很感興趣,因爲它總是有效,而且非常簡單。您需要像jQuery這樣的技術,您可以隨時添加課程。您可以使用jQuery中的AddClass和RemoveClass API在運行時添加/刪除CSS類。看看這裏。 http://jqueryui.com/addClass/

0

,你可以使用這樣

<asp:Button ID="btnInvite" runat="server" CssClass="cssLoginButton blue" Text="Invite" ToolTip="Invite" ValidationGroup="Inivitation" CausesValidation="true" UseSubmitBehavior = False"onclick="btnInvite_Click" /> 
相關問題