DotNetNuke CustomValidator奇怪的行为

时间:2012-04-20 14:41:44

标签: asp.net dotnetnuke customvalidator

我正在开发一个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;
}

感谢您的帮助。

有什么想法吗?

2 个答案:

答案 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验证。