9

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

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

因此,我的必填字段验证器没有在客户端被调用。如何通过 Javascript 调用必填字段验证器?

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

4

4 回答 4

12

您可以在为此命名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>
于 2011-06-20T18:42:48.397 回答
8

Page_ClientValidate触发表单上所有验证器的验证,正如@gilly3 所示,您还可以通过循环收集和调用来验证它们ValidatorValidate(validator)

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

验证器参数必须是一个 DOM 对象,如果您使用母版页或用户控件,则该对象的获取可能会很棘手,因为元素 ID 最终可能与您在标记中指定的完全不同。

例如

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

变成

<span id="cph_0_rfvCampaignFile" ...>

我通过使用像这样的 jQuery 选择器在我的一个项目中解决了这个问题

ValidatorValidate($('[id$="rfvCampaignFile"]').get(0));

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

于 2013-01-09T19:56:05.540 回答
3

查看 ASP.Net 验证器的客户端 api。页面上的所有验证器都暴露在ArrayviaPage_Validators中。您可以调用ValidatorValidate(validator)单个验证器来调用它。因此,要调用页面上的所有验证器,您可以:

Page_Validators.forEach(ValidatorValidate);

顺便说一句,要Array.forEach在旧浏览器中使用,您需要扩展 Array

于 2011-06-20T17:36:17.983 回答
1

如果您使用的是 jquery,那么设置一个 ASP.NET 控件ClientIDMode = "Static",您可以使您的代码更易于阅读,如下所示:

ValidatorValidate($('#MyControl'));

或非常相似的东西。

于 2013-04-03T20:11:33.767 回答