2012-01-27 88 views
1

不知道這裏出了什麼問題。這是由其他人開發的頁面,我正在嘗試解決其中一個問題。asp:CustomValidator不返回'false'

場景:

ASP.NET網站。

Login.aspx有<asp:login>並且有三個驗證組。 Login.aspx.cs是「user_login」的部分類。

每個驗證組都有一個文本框和一個關聯customvalidator。當在相應的文本框中輸入內容時,所有三個自定義驗證器都會被觸發,但問題只是第一個文本框(綁定到validationgroup = 1)在驗證失敗時返回false。

對於第二個和第三個,customvalidator會被觸發,但是如果存在驗證問題,甚至在設置「args.IsValid = false;」之後,該過程將繼續進行,需要進一步執行。

不知道這裏發生了什麼問題。我希望customvalidator返回false。最糟糕的情況是,有什麼方法可以在驗證失敗時將控件返回到「文本框」?

下面是使用的自定義驗證程序。

<asp:CustomValidator ID="ExistingIdValidator" runat="server" ControlToValidate="NewUserName" 
    ValidateEmptyText="true" ValidationGroup="NewUserForm" 
    OnServerValidate="NewUserNameCheck_ServerValidate"> 
</asp:CustomValidator> 


protected void NewUserNameCheck_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    CustomValidator validator = source as CustomValidator; 
    if (validator != null) 
    { 
     string NewuserNameValue = this.NewUserName.Text; 
     Guid registeredUserId = (Guid)Membership.GetUser(NewuserNameValue).ProviderUserKey; 
     if (registeredUserId != null) 
     { 
      validator.IsValid = false; 
      this.FailureText_New.Text = "This UserID already exists. Please login as existing user"; 
      args.IsValid = false; 
     } 
    } 
} 
+0

代碼不顯示在這裏..仍在嘗試 – Anirudh 2012-01-27 21:39:48

+0

@ jadarnel27:我看不到你是否修改了我的代碼。如果它是我原始文章中的自定義驗證器代碼,它仍然不適用於我。 – Anirudh 2012-01-27 22:25:15

+0

您能否顯示JavaScript函數NewUserNameCheck_ServerValidate? – 2012-01-28 00:07:25

回答

0

有關ASP.NET服務器端驗證的有趣之處在於它不會自動阻止您的點擊事件執行。就好像驗證過程被執行,然後結果被忽略。所以,放在按鈕事件中的第一件事是if (!Page.IsValid) return;。這就是你如何防止事件的其他部分執行,這就是你如何強制用戶糾正表單上的任何錯誤。