0

Dotnetnuke に登録ページがあります。多くのユーザーが電子メールを誤って入力しているため、電子メールの確認フィールドが必要です。

私は日曜日にこの 7 つの方法を見てきましたが、これを実現する方法がわかりません。フォームを表示するための回りくどいロジックを掘り下げましたが (私はそう思います)、フックする適切な場所を見つけることができません。コード化できる単純な「registration.ascx」があればいいのですが、あるとしても見つかりません。

どんな助けでも大歓迎です。

ティア。

4

4 に答える 4

2

これまで見てきたように、組み込みのレジストレーションを DNN で調整する簡単な方法はありません。

ただし、組み込みの登録を無視して、独自の登録を使用できます。DNN よりも多くのプロセスをカスタマイズできるように構築された サードパーティ モジュールがいくつかあります。動的登録は、私が最もよく耳にするモジュールですが、個人的には使用したことがないため、あなたが望んでいることを実行できるかどうかは保証できません.

独自のモジュールを作成して登録を行い、サイト設定の登録ページをそのモジュールを含むページに設定することもできます。

于 2009-12-17T22:16:38.803 に答える
1

BDukes はここで最良の答えを持っています 登録とユーザー管理のためにサードパーティのモジュールを構築して使用しました - DataSprings による動的登録が最も便利です - (私はインターフェースが好きではありませんが、動作します)

于 2009-12-18T15:31:07.807 に答える
0

私が追求した解決策を他の誰かのために文書化したいと思いました。

何よりもまず、これはもろいクラッジです。つまり、DNN の適切なチャネルを通じて行われた登録への変更は、これを破る可能性が高いということです。スタイルを変更すると、それが壊れる可能性があります。それはもろいクラッジです...あなたは何をするつもりですか。一方で、それは非常に小さな労力であり、エンド ユーザーはそれが面倒だとは思いもしませんでした。

私が使用していたバージョンの DNN では、ユーザー登録は admin/users/user.ascx の下のユーザー コントロールに格納されていました。実際のコードは、ネストされたユーザー コントロールから出力されます。DNN のソースを掘り下げることなく、これに夢中になることはできませんでした (もちろん、これは別のオプションです)。一致しました。

それがまさに私がしたことです:

<dnn:propertyeditorcontrol id="UserEditor" runat="Server"
    enableClientValidation = "true"
    sortmode="SortOrderAttribute" 
    labelstyle-cssclass="SubHead" 
    helpstyle-cssclass="Help" 
    editcontrolstyle-cssclass="NormalTextBox" 
    labelwidth="200px" 
    editcontrolwidth="200px" 
    width="400px" 
    editmode="Edit" 
    errorstyle-cssclass="NormalRed"/>
    <!-- new code starts here -->
    <span id="spanEmailConfirm" style="display: inline-block; width: 400px;">
        <table cellpadding="0" style="margin-left:3px" cellspacing="0" border="0">
            <tr>
                <td>
                    <div style="width: 400px;">
                        <div style="border:0px solid black; float: left; width: 200px;">
                            <img onclick="toggleDisplay('divHelpConfirmEmailAddress');" style="border-width: 0px;" alt="Enter a valid confirmation Email address" src="/images/help.gif" title="Enter a valid confirmation Email address" tabindex="-1" id="imgConfirmEmail"/>
                            <asp:Label runat="server" ID="lblConfirmEmail" class="SubHead">
                                Confirm Email Address:
                            </asp:Label>
                        </div>
                        <div style="float: right; width: 200px;">
                            <asp:TextBox class="NormalTextBox" onblur="validateEmail();" runat="server" id="txtConfirmEmail" /><img style="border-width: 0px;" alt="Email confirmation is required" src="/images/required.gif" title="Email confirmation is required"/>
                        </div>
                    </div>            
                </td>
            </tr>
            <tr>
                <td>
                    <asp:RequiredFieldValidator runat="server" ID="reqEmailConfirm" CssClass="NormalRed" ControlToValidate="txtConfirmEmail" ErrorMessage="You must enter a valid confirmation email address." Display="Dynamic"></asp:RequiredFieldValidator>
                    <asp:CustomValidator runat="server" ID="reqEmailsMatch" CssClass="NormalRed" ControlToValidate="txtConfirmEmail" ValidateEmptyText="false" ClientValidationFunction="validateEmail" Display="Dynamic" ErrorMessage="Email confirmation value must match the email value."></asp:CustomValidator>
                </td>
            </tr>
            <tr>
                <td>
                    <div style="width:200px; display:none" class="Help" id="divHelpConfirmEmailAddress">
                        <span id="spanConfirmEmail">Confirm your email address.</span>
                    </div>
                </td>
            </tr>
        </table>
    </span>
    <!-- new code ends here -->

これにより、ascx の別の場所に埋め込んだ次の JavaScript が呼び出されます。

<script type="text/javascript">
    function validateEmail(sender, args) {
        var emailControlName;
        emailControlName = "dnn$ctr459$ManageUsers$User$UserEditor$ctl04$Email";

        var emailControl = document.getElementsByName(emailControlName)[0];

        args.IsValid = (emailControl.value == args.Value);
    }

    function toggleDisplay(controlId) {
        var control = document.getElementById(controlId);

        if (control.style["display"] == "block") {
            control.style["display"] = "none";
        } else {
            control.style["display"] = "block";
        }
    }

</script>

明らかに、ここで最も醜い部分は電子メール コントロール名ですが、コントロール ID について私が見つけたすべての調査は、これが決定論的であることを示しています。つまり、入力側で何かが変更されない限り、同じになるということです。

したがって、これは、開発者が書いた後にシャワーを浴びたい (またはCode Offsetsを購入したい) ようなソリューションですが、機能し、迅速かつ簡単です。

最後の注意: このコードには、フォームに何も入力されていない場合、確認の検証が起動され、他の検証は起動されないという奇妙な動作があります。ValidationGroup が正しく設定されていませんよね?私が知る限り、間違っています。最終的に、他のフィールドが入力されると残りの検証が開始されるため、追跡する価値はありませんでした。この問題が何であるかを誰かが知っている場合は、この質問を更新してください。

于 2009-12-22T15:53:12.183 に答える
0

Another solution might be to use the Verified setting under Site Settings in the Advanced Settings / Security Settings for User Registration - that way they have to get the email and use a code to confirm their email address

Not a friendly way to do it but it is another option.

于 2009-12-19T03:47:36.807 に答える