0

開発中の dotnetnuke モジュールに奇妙な問題があります。asp カスタムバリデーターを使用して入力を検証したいと考えています。簡単にするために、フィールドが空ではなく、少なくとも数文字の長さであるかどうかのみをチェックします。(私が使用できる他の標準バリデーターがあることは知っています)。

問題は、私のコードがローカル (開発) では正常に動作するが、本番環境では動作しないことです。私が知っている唯一の違いは、DNN 5 の代わりに DNN 6 を使用していることです。

本番サイトで何を入力しても、常に検証エラー メッセージが表示されます。

これらは、Web ページの関連部分です。

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

助けてくれてありがとう。

何か案は?

4

2 に答える 2

4

解決済み:

dotnetnuke ログを使用して、e.isValid が false に設定されるタイミングと理由を確認しました。カスタム バリデータ コントロールが 2 回呼び出されていました。最初は正常に検証されましたが、2 回目はそうではありませんでした。

私の解決策は、マークアップでカスタム サーバー バリデータ コントロールを無効にし、送信直後に有効にすることでした (オフにすることを忘れないでください)。

このような:

<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 が 2 回呼び出された理由はまだわかりません。これは DNN 5 と関係があると思います (おそらく DNN 6 で修正されました)。

これが誰かを助けたことを願っています。

于 2012-04-23T08:20:06.223 に答える
0

バリデータが 2 回呼び出される理由は、link button.
GridViewonBubbleEventを生成します。これにより、validator検証も行われます。

于 2012-06-26T08:44:44.973 に答える