0

我正在开发的 dotnetnuke 模块有一个奇怪的问题。我想使用 asp 自定义验证器来验证一些输入。为简单起见,我将仅检查该字段是否为空且至少有几个字符长。(我知道我可以使用其他标准验证器)。

问题是我的代码在本地(开发)工作正常,但在生产中不行。我知道的唯一区别是我使用 DNN 6 而不是 DNN 5。

无论我在生产站点上输入什么,它总是向我显示验证错误消息。

这些是网页的相关部分:

澳交所:

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

谢谢你的帮助。

有任何想法吗?

4

2 回答 2

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 中修复)。

我希望这对某人有所帮助。

于 2012-04-23T08:20:06.223 回答
0

验证器被调用两次的原因是由于link button.
生成 GridView onBubbleEvent,这也会导致validator验证。

于 2012-06-26T08:44:44.973 回答