我正在尝试确定为什么我的验证功能未在我的网络表单上调用。我在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遵循了指示,但它似乎没有任何区别。
谢谢你的任何想法!
答案 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
。
这让我想到了我已经联系过的问题。
我希望这有助于其他人
谢谢!