Я хотел задокументировать решение, которое я преследовал для этого, для всех, кто пришел.
Прежде всего это хрупкий клоч; я имею в виду, что любые изменения в регистрации, сделанные через соответствующие каналы в DNN, могут нарушить это. Любые изменения стиля могут разбить его. Это хрупкий клоч ... что ты собираешься делать. С другой стороны, это был очень небольшой объем усилий, и конечный пользователь понятия не имел, что это 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>
Очевидно, что уродливая часть здесь имя управления электронной почты , но каждое исследование, которое я смог найти на идентификаторе управления, указывает, что это детерминировано, т. е. оно будет таким же, если только что-то не изменится на стороне ввода.
Итак, это решение, которое заставляет разработчика принимать душ после написания (или купить Code Offsets), но он работает, и это быстро и просто.
Осторожно: этот код имеет странное поведение, которое, если NOTHING заполнено в форме, будет подтверждено подтверждение, а не остальные. ValidationGroup настроен неправильно, не так ли? Насколько я мог сказать, это было неправильно. В конечном счете, это не стоило отслеживать, поскольку остальная часть проверки была выпущена после того, как были заполнены другие поля, так что вы там. Если кто-нибудь знает, что это за проблема, пожалуйста, обновите этот вопрос.