2016-01-23 271 views
1

我所做的一切this page告訴我這樣做,但它不工作,我看到人們張貼有關這個問題,被告知要加一個必填字段校驗器,我已經做了那仍然不起作用。ASP.NET自定義的驗證工作不

這裏的客戶端部分

   <asp:CustomValidator 
        ID="CustomValidator1" 
        runat="server" 
        ControlToValidate="TextBoxUsername" 
        ErrorMessage="Username already exists" 
        OnServerValidate="CustomValidator1_ServerValidate" 
        ValidateEmptyText="True" <!--tried without this line--> 
        ValidationGroup="form"> <!--tried without this line--> 
       </asp:CustomValidator> 

這裏是C#服務器端代碼

 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args){ 
      args.IsValid = false; 
     } 

看起來很簡單吧?它應該不斷出現,對吧? 好,它只出現在開頭,然後永遠地消失,這是因爲我在Page_Load()方法這一行,但我也有它的button_click()方法。

Page.Validate(); 
+0

那麼你的提交按鈕是什麼樣子? – NikolaiDante

+0

'' – Macromeda

+0

''protected void Button1_Click(object sender,EventArgs e){ Page .Validate(); //其他的代碼行,不是小鬼 }' – Macromeda

回答

2

首先,去除驗證組,並添加Text

<asp:CustomValidator 
    ID="CustomValidator1" 
    runat="server" 
    ControlToValidate="TextBoxUsername" 
    ErrorMessage="Username already exists" 
    Text="Username already exists" 
    OnServerValidate="CustomValidator1_ServerValidate" 
    ValidateEmptyText="True"> 
</asp:CustomValidator> 

ErrorMessage將在ValidationSummary控制顯示和Text應顯示在驗證器。

更新按鈕導致驗證(我相信真正反正是默認的,但讓是明確的):

然後檢查頁面點擊後有效,Page.Validate並不需要是稱爲它會自動爲CauseValidation

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     // Do Cool Stuff 
    } 
} 

此外,檢查時,砸在點擊方法中設置斷點,你沒有任何客戶端的接線(如ClientValidationFunction="somejsfunction"上驗證),所以當你通過服務器端讓你只會打這個代碼驗證。

+0

同樣的問題: 在button_click事件處理程序 主代碼我有'Page.Validate();如果(Page.IsValid){//我的代碼在這裏}}'是的,當我點擊它時,它會在加載頁面後重新顯示,但在所有其他必需的字段驗證程序消失之後,您會明白我在說什麼? – Macromeda

+0

請參閱編輯,您可能會被其他_client方validation_在表單的其餘部分阻止獲取_server端validation_。 – NikolaiDante

+0

如果您使用[mcve](http:// stackoverflow。com/help/mcve)我會在早上(這裏午夜)在我的IDE中的測試應用程序中啓動它,並在早上進行更詳細的檢查。 – NikolaiDante