在UpdatePanel中使用ClientValidationFunction (JavaScript)

Using ClientValidationFunction (JavaScript) in an UpdatePanel

本文关键字:JavaScript ClientValidationFunction UpdatePanel      更新时间:2023-09-26

我想确定为什么我的验证函数没有在我的web表单上被调用。我在MSDN上读了很多文章,最值得注意的是找到了这条金块。

当你在UpdatePanel控件中使用CustomValidator控件时,确保验证器控件及其关联的控件在同一个面板上。有关使用UpdatePanel的更多信息控件的部分页面更新,请参见部分页面呈现概述。

根据这些知识,我修改了我的代码如下:
<asp:UpdatePanel ID="UpdatePanel0" runat="server">
    <ContentTemplate>
        <script type="text/javascript">
            function IsNotChecked(obj, args) {
                args.IsValid = false;
                if (document.getElementByID("cbRegion0").checked) 
                {
                    args.IsValid = true; return true; 
                }
                return false;
             }
        </script>
        <asp:CheckBox ID="cbRegion0" runat="server" ValidationGroup="0" AutoPostBack="true" OnCheckedChanged="CheckBox_CheckedChanged" />
        <asp:CustomValidator ID="CustomValidator0" runat="server" ValidationGroup="0" ClientValidationFunction="IsNotChecked" ErrorMessage="You did not check the box." ValidateEmptyText="True" />
    </ContentTemplate>
</asp:UpdatePanel>

我遇到的问题是,当单击我的页面上的提交按钮时,验证例程不会执行。设计的一些独特元素是,上面的代码实际上是通过Control.Add()添加到页面的。ascx内部,但我不知道这将如何影响ClientValidationFunction。我相信这与<script>在表单内的位置有关,但尽管遵循MSDN的指示,它似乎并没有什么不同。谢谢你的建议!

UpdatePanel中的脚本将在异步回发后丢失。试着把你的IsNotChecked方法放在任何更新面板之外…或者,实现IScriptControl并将您的验证方法放入您创建的客户端脚本文件中,以伴随脚本控件…

我在如何获得ASP的客户端验证的Stack Overflow中找到了答案。网页要运行吗?讨论。抱歉没有早点看到。正如@Brian指出的那样,通过在我的代码中指定ValidationGroup="0",预期页面上的提交按钮具有相同的ValidationGroup分配。最后,我只是从指令中删除了属性,现在它调用JS。
我找到了答案,因为我正在浏览页面源代码,并注意到提交按钮正在调用javascript WebForm_OnSubmit()方法,最终检查Page_ValidationActive
这让我想到了我刚才提到的问题。我希望这能帮助到其他人。谢谢!