通过javascript调用必需的字段验证器

时间:2011-06-20 17:30:33

标签: javascript asp.net client requiredfieldvalidator

我的ASP.NET表单中有一个非标准的提交按钮。

<a class="button" href="#" onclick="this.blur();SubmitForm();"><span>Submit</span></a>

因此,我的所需字段验证器未在客户端调用。如何通过Javascript调用必需的字段验证器?

或者,是否有更好的方法来完成我想要做的事情?

4 个答案:

答案 0 :(得分:11)

您可以在名为Page_ClientValidate的内置客户端功能中使用此功能。请查看以下代码片段以供参考

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientSide_Validation.aspx.cs"
    Inherits="ClientSide_Validation" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function performCheck() {

            if (Page_ClientValidate()) {
            }

        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lbl1" runat="server" Text="Please enter some value"></asp:Label>
        <asp:TextBox ID="txtbox1" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="valReq" ControlToValidate="txtbox1" runat="server"
            ErrorMessage="*" Display="Dynamic">
        </asp:RequiredFieldValidator>
        <input type="button" id="btnValidate" value="Submit" onclick="performCheck()" />
        <a href="#" onclick="performCheck();">Validate</a>
    </div>
    </form>
</body>
</html>

答案 1 :(得分:8)

Page_ClientValidate触发对表单上所有验证器的验证,并且@ gilly3显示您也可以通过循环收集并调用ValidatorValidate(validator)

来验证它们。

但是,如果您只想验证一个特定的验证器,那么您只需要为一个项目调用ValidatorValidate(validator)

验证器参数需要是一个DOM对象,这可能很难获得,因为如果您使用母版页或用户控件,元素ID可能最终与您在标记中指定的完全不同。

e.g。

<asp:RequiredFieldValidator ID="rfvCampaignStartDate" runat="server" .../>

变为

<span id="cph_0_rfvCampaignFile" ...>

通过使用像这样的

jQuery选择器,我在我的一个项目中解决了这个问题
ValidatorValidate($('[id$="rfvCampaignFile"]').get(0));

ASP.NET只为ID添加前缀,以创建一个唯一的名称,我可以使用id$=部分选择器来匹配以"rfvCampaignFile"结尾的任何ID,因为我写的网站我知道它不会发生冲突与其他控件。最后,我使用.get(0)将DOM对象引用返回给第一个(仅在我的情况下)DOM对象匹配。

答案 2 :(得分:3)

查看client side api for ASP.Net validators。页面上的所有验证器都通过ArrayPage_Validators中公开。您可以在单个验证器上调用ValidatorValidate(validator)来调用它。因此,要调用页面上的所有验证器,您可以:

Page_Validators.forEach(ValidatorValidate);

顺便说一句,在旧浏览器you'll need to extend Array中使用Array.forEach

答案 3 :(得分:1)

如果您正在使用jquery,那么设置一个ASP.NET控件ClientIDMode = "Static",您可以使代码更容易阅读:

ValidatorValidate($('#MyControl'));

或类似的东西。