2009-12-17 7 views
0

J'ai une page d'enregistrement dans Dotnetnuke. Je veux avoir un champ d'email de confirmation, parce que beaucoup de nos utilisateurs saisissent mal leur email.Confirmer Email sur Dotnetnuke Enregistrement

J'ai regardé ces sept façons de dimanche, et je ne peux pas comprendre comment faire pour que cela se produise. J'ai creusé à travers la logique détournée pour afficher le formulaire (je pense), et je ne peux pas trouver le bon endroit pour accrocher. Ce serait bien s'il y avait un simple "registration.ascx" je pourrais le coder, mais s'il y en a, je ne peux pas le trouver.

Toute aide serait grandement appréciée.

TIA.

Répondre

0

Je voulais documenter la solution que j'ai recherchée pour tous ceux qui sont venus. D'abord et avant tout, c'est un kludge cassant; par cela, je veux dire que tout changement d'enregistrement effectué par les canaux appropriés dans DNN est susceptible de briser cela. Tous les changements de style ont le potentiel de le casser. C'est un kludge cassant ... qu'est-ce que tu vas faire. D'un autre côté, c'était un très petit effort et l'utilisateur final n'a aucune idée que c'est un kludge.

Dans la version de DNN avec laquelle je travaillais, les données d'enregistrement des utilisateurs sont stockées dans un contrôle utilisateur sous admin/users/user.ascx. Le code réel est émis par un contrôle utilisateur imbriqué. Je ne pouvais pas m'impliquer dedans sans creuser dans la source pour DNN (ce qui bien sûr, est une autre option), mais l'essentiel était que tout ce que je voulais faire était de mettre une autre zone de texte juste après et s'assurer que les adresses email apparié.

Donc c'est exactement ce que je faisais:

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

Cela appelle le javascript suivant, que j'EMBEDDED ailleurs dans le 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> 

De toute évidence, la partie la plus laide est ici le nom du contrôle e-mail , mais chaque recherche que j'ai pu trouver sur les identifiants de contrôle indique que cela est déterministe, c'est-à-dire qu'il sera le même à moins que quelque chose ne change du côté de l'entrée.

Donc, c'est le genre de solution qui fait que le développeur veut prendre une douche après avoir écrit (ou acheter Code Offsets), mais cela fonctionne, et c'est rapide et facile. Un dernier avertissement: ce code a le comportement étrange que si RIEN n'est rempli sur le formulaire, la validation de confirmation se déclenchera, et pas les autres. ValidationGroup n'est pas défini correctement, n'est-ce pas? Mauvais, autant que je pourrais dire. En fin de compte, cela ne valait pas la peine d'être retrouvé, car le reste de la validation était déclenché une fois que les autres champs étaient remplis, alors vous voilà. Si quelqu'un sait ce que c'est, veuillez mettre à jour cette question.

2

Comme vous l'avez vu, il n'y a pas un moyen simple d'ajuster l'enregistrement intégré avec DNN.

Toutefois, vous pouvez ignorer l'enregistrement intégré et utiliser le vôtre. Il y a a few 3rd party modules qui sont construits pour vous permettre de personnaliser le processus plus que DNN. Dynamic Registration est le module dont j'entends parler le plus souvent, mais je ne l'ai pas utilisé personnellement, donc je ne peux pas garantir qu'il fera ce que vous voulez.

Vous pouvez également créer votre propre module pour effectuer l'enregistrement, puis définir simplement la page d'inscription dans vos paramètres de site sur une page avec ce module.

1

BDukes a la meilleure réponse ici moi-même avons construit et utilisé des modules 3ème partie pour l'enregistrement et la gestion des utilisateurs - Enregistrement dynamique par DataSprings est le plus utile - (je ne aime pas l'interface, mais il fonctionne)

0

Une autre solution peut être d'utiliser le paramètre Vérifié sous Paramètres du site dans les Paramètres avancés/Paramètres de sécurité pour l'enregistrement de l'utilisateur - de cette façon, ils doivent obtenir l'adresse électronique et utiliser un code pour confirmer leur adresse e-mail

Pas une façon amicale de le faire mais c'est une autre option.