在UpdatePanel中使用ClientValidationFunction(JavaScript)

时间:2011-07-27 13:59:57

标签: c# javascript .net validation updatepanel

我正在尝试确定为什么我的验证功能未在我的网络表单上调用。我在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>

我遇到的问题是单击页面上的提交按钮时,验证例程没有执行。 设计的一些独特元素是上面的代码实际上是通过Control.Add()添加到页面的.ascx内部,但是我看不出它会如何影响ClientValidationFunction。我认为这与<script>在表单中的位置有关,但尽管在MSDN遵循了指示,但它似乎没有任何区别。 谢谢你的任何想法!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我在How do I get Client-side validation of ASP.Net page to run?讨论中找到了Stack Overflow的答案。很抱歉没有看到这个。正如@Brian指出的那样,通过在我的代码中指定ValidationGroup="0",预期页面上的提交按钮具有相同的ValidationGroup。最后我刚刚从指令中删除了属性,它现在调用了JS 我找到了答案,因为我正在查看页面源代码,发现提交按钮调用的是javascript WebForm_OnSubmit()方法,最终检查Page_ValidationActive
这让我想到了我已经联系过的问题。 我希望这有助于其他人 谢谢!