我试图确定为什么未在Web表单上调用我的验证功能。我通读了MSDN上的各种文章,最值得注意的是找到了这个块。


  当您在UpdatePanel控件中使用CustomValidator控件时,
  确保验证程序控件及其关联的控件
  在同一面板中。有关使用UpdatePanel的更多信息
  有关部分页面更新的控件,请参见Partial-Page Rendering概述。


有了这些知识,我就对代码进行了如下修改:

<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>


我遇到的问题是,单击页面上的“提交”按钮后,验证例程无法执行。
该设计的一些独特之处在于,上面的代码实际上位于.ascx内部,该.ascx通过Control.Add()添加到页面中,但是我看不到这将如何影响ClientValidationFunction。我相信这与<script>在表单中的位置有关,但是尽管遵循MSDN的指示,但似乎没有什么不同。
感谢您的任何想法!

最佳答案

异步回发后,UpdatePanel内部的脚本将丢失。尝试将IsNotChecked方法放置在任何更新面板之外...,或者实现IScriptControl并将验证方法放置在您创建的与脚本控件一起创建的客户端脚本文件中...

关于c# - 在UpdatePanel中使用ClientValidationFunction(JavaScript),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6845668/

10-12 14:30