2016-08-04 59 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