我正在开发一个dotnetnuke模块的奇怪问题。 我想使用asp自定义验证器来验证一些输入。为了简单起见,我只检查字段是否为空且至少有几个字符长。 (我知道我可以使用其他标准验证器。)
问题是我的代码在本地(开发)工作正常,但在生产时却没有。 我知道的唯一区别是我使用的是DNN 6而不是DNN 5.
无论我在生产网站上输入什么内容,它始终会显示验证错误消息。
这些是网页的相关部分:
ASCX:
<div>
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="False" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="ValidationSummary1" CssClass="validationSummary" runat="server"
EnableClientScript="False" ShowSummary="true" ShowMessageBox="false" />
<asp:CustomValidator ID="CustomValidatorActiveTab" runat="server" Display="None"
ErrorMessage="Error the field ... was not correct..." OnServerValidate="CustomValidatorActiveTab_ServerValidate"></asp:CustomValidator>
<asp:Button ID="btnZoeken" CssClass="btnZoeken" CausesValidation="true" runat="server" Text="<%$ Resources:GLOBAL, btnZoeken %>"
OnClick="btnZoeken_Click" />
代码
private bool ValidateTab_Ondernemingsnummer()
{
if (!String.IsNullOrEmpty(txtOndernemingsnummer.Text) && txtOndernemingsnummer.Text.Length >= 3)
{
return true;
}
return false;
}
protected void CustomValidatorActiveTab_ServerValidate(object source, ServerValidateEventArgs e)
{
int activeTab = GetActiveIndexAccordion();
switch (activeTab)
{
//Zoeken op ondernemingsnummer
case 0:
if (!ValidateTab_Ondernemingsnummer())
{
e.IsValid = false;
}
else
{
e.IsValid = true;
}
break;
}
感谢您的帮助。
有什么想法吗?
答案 0 :(得分:4)
解决:
我使用dotnetnuke日志记录来查看e.isValid设置为false的时间和原因。 我的自定义验证器控件被调用了两次!! 第一次验证好了,第二次没有验证。
我的解决方案是在标记中禁用自定义服务器验证器控件,并在完成提交后启用它(并且不要忘记将其关闭)。
像这样:
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="False"
UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="ValidationSummary1" CssClass="validationSummary" runat="server"
EnableClientScript="False" ShowSummary="true" ShowMessageBox="false" />
<asp:CustomValidator ID="CustomValidatorActiveTab" runat="server" Display="None"
EnableClientScript="false" Enabled="false" ErrorMessage="ERROR ONDERNEMINGSNUMMER"
OnServerValidate="CustomValidatorActiveTab_ServerValidate"></asp:CustomValidator>
Enabled = false在这里很重要!
然后在按钮中单击
protected void btnZoeken_Click(object sender, EventArgs e)
{
CustomValidatorActiveTab.Enabled = true;
CustomValidatorActiveTab.Validate();
if (Page.IsValid)
{
CustomValidatorActiveTab.Enabled = false;
我仍然不知道为什么调用CustomValidatorActiveTab_ServerValidate两次。 它与我想的DNN 5有关(也许它已在DNN 6中修复)。
我希望这有助于某人。
答案 1 :(得分:0)
两次调用验证器的原因是link button
生成GridView onBubbleEvent
,这也会导致validator
验证。