确认Dotnetnuke注册的电子邮件

时间:2009-12-17 19:33:16

标签: .net dotnetnuke registration

我在Dotnetnuke有一个注册页面。我想要一个确认电子邮件字段,因为我们的很多用户都错误地输入了他们的电子邮件。

我已经看过星期天的七种方式,并且无法弄清楚如何实现这一点。我已经挖掘了显示表格的迂回逻辑(我认为),我找不到合适的地方。如果有一个简单的“registration.ascx”我可以将其编码进去,这肯定会很好,但如果有的话,我找不到它。

非常感谢任何帮助。

TIA。

4 个答案:

答案 0 :(得分:2)

正如您所见,没有一种简单的方法可以使用DNN调整内置注册。

但是,您可以忽略内置注册并使用自己的注册。构建a few 3rd party modules可以让您自定义DNN所做的更多过程。 Dynamic Registration是我经常听到的模块,但我没有亲自使用它,所以我不能保证它是否会做你想要的。

您也可以构建自己的模块进行注册,然后只需将站点设置中的注册页面设置为包含该模块的页面。

答案 1 :(得分:1)

BDukes在这里有最好的答案我已经构建和使用第三方模块进行注册和用户管理 - DataSprings的动态注册是最有用的 - (我不喜欢界面但它有效)

答案 2 :(得分:0)

另一种解决方案可能是使用“用户注册的高级设置/安全设置”中“网站设置”下的“验证”设置 - 这样他们就必须收到电子邮件并使用代码确认其电子邮件地址

这不是一种友好的方式,但这是另一种选择。

答案 3 :(得分:0)

我想记录我为其他任何人提出的解决方案。

首先,这是一个脆弱的污泥;通过这种方式,我的意思是通过DNN中的适当渠道进行的注册变更可能会打破这一点。任何样式更改都有可能破坏它。这是一个脆弱的kludge ...你要做什么。另一方面,这是一个非常小的努力,最终用户不知道它是一个kludge。

在我正在使用的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 -->

这会调用以下javascript,我将其嵌入ascx中的其他位置:

<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),但它确实有效,并且快速而简单。

最后一个注意事项:此代码确实有一种奇怪的行为,如果在表单上填写了NOTHING,则确认验证将触发,而不是其他。 ValidationGroup设置不正确,对吧?就我所知,错了。最终,它不值得追踪,因为一旦其他字段被填写,其余的验证就会被解雇,所以就在那里。如果有人知道这个问题是什么,请更新这个问题。