2016-08-04 73 views
1

在我正在開發的應用程序中,我使用ASP.NET Web窗體提供的驗證控件和我正在使用的窗體的某些部分JavaScript的。ASP.NET WebForms - 同時執行JavaScript驗證和驗證控制

驗證的兩個方面都應該如此,但是,當我單擊Submit按鈕時,ASP.NET驗證首先出現,然後執行我在JavaScript中進行的自定義驗證。因此,當表單不完整並提交時,只會顯示ASP.NET驗證錯誤,並且在更正這些錯誤並提交表單時,會顯示我的驗證錯誤。

我想要的是當用戶點擊提交按鈕時,ASP.NET驗證和我的JavaScript驗證同時發生,以便用戶可以同時查看所有錯誤。

<form id="StudentLSFApplication" runat="server" onsubmit="return validateForm()"> 
    <!--other html code--> 
    <asp:Button ID="SaveLSFApplication" runat="server" Text="Save Application" OnClick="saveApplication" 
      ValidationGroup="AllValidation" /> 
</form> 

<script> 
    function validateForm() { 
     //my validation 
    } 
</script> 

正如你可以從我的示例代碼中看到的,我有JavaScript函數validateForm()被稱爲在onsubmit事件,Button控制是AllValidation驗證組的一部分。此刻,表單提交AllValidation首先發生,如果沒有問題,則發生validateForm()

回答

2

我認爲你要找的是CustomValidator。你可以這樣使用它:

<script type="text/javascript"> 
     function validateFormElement(sender, args) { 
      if (args.Value == "waarde") { 
       args.IsValid = true; 
      } else { 
       args.IsValid = false; 
      } 
     } 
    </script> 

    <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="myValidation"></asp:TextBox> 

    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Input error" ValidationGroup="myValidation" ClientValidationFunction="validateFormElement" ControlToValidate="TextBox1"></asp:CustomValidator> 

    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValidation" /> 

而且你仍然可以使用所有其他驗證器。無需將每個驗證都填入該javascript函數中。

+0

建議使用Microsoft提供的其他驗證器,或者爲了更加複雜,每種驗證/控制都使用一個「CustomValidator」。 ASP.NET驗證器非常棒,因爲它們使用JavaScript **和C#驗證(代碼隱藏)**。 JavaScript可以被繞過,所以你應該在'CustomValidator'的事件後添加一個代碼,並且不僅在JavaScript上編程驗證,甚至在C#上編寫驗證。 「CustomValidator」應該只指向一個控件,但它可以與其他驗證器共享相同的函數。應該設置「ControlToValidate」。 – modiX

+0

上面的例子是針對表單中的單個控件,而不是一個函數中的完整驗證。稍微編一些答案,使其更加清晰。但是如果你想對多個控件進行更復雜的客戶端驗證,比如'如果選中CheckBox1然後TextBox1必須包含數據',那麼你可以省略ControlToValidate來確保CustomValidator激發。而且仍然總是在代碼背後進行驗證,如modiX所示。 – VDWWD

+0

太棒了,這工作,謝謝! – RoyalSwish