Опитвам се да създам персонализиран валидатор, за да проверя дали имейл вече е в базата данни в момента на регистрация на потребител. Виждал съм много подобни въпроси, свързани с персонализирани валидатори, но нито един отговор не е донесъл полза.
Опростих метода OnServerValidate, така че винаги да връща false, за да получа ВСЯКАКЪВ отговор, но не получавам никакъв отговор. Вярвам, че методът никога не се използва. Стигнах до известно заключение, че има някакъв друг проблем, който оказва влияние върху задействането на събитието.
Ето ASP, който е в контейнер за съдържание в основната страница. В основния файл има и scriptmanager.
‹%--имейл и потвърдете имейл--%>
<td>
<ajaxToolkit:TextBoxWatermarkExtender ID="WatermarkEmail" runat="server" TargetControlID="Email" WatermarkText="Email" WatermarkCssClass="watermarked roundedcorner" />
<asp:TextBox ID="Email" runat="server" Columns="48" CssClass="roundedcorner"></asp:TextBox>
<asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email" ErrorMessage="E-mail is required." ToolTip="E-mail is required." ValidationGroup="UserInformation" CausesValidation="True"><font color="red">*</font></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ForeColor="Red" ControlToValidate="Email" ValidationGroup="UserInformation" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
<asp:CustomValidator ID="CheckEmail" ForeColor="Red" ErrorMessage="This email already is registered." ValidateEmptyString="true" display="Dynamic" ControlToValidate="Email" runat="server" ValidationGroup="UserInformation" OnServerValidate="checkEmailValidator_ServerValidate"></asp:CustomValidator>
</td>
</tr>
<tr>
<td>
<ajaxToolkit:TextBoxWatermarkExtender ID="WatermarkConfirmEmail" runat="server" TargetControlID="ConfirmEmail" WatermarkText="Confirm Email" WatermarkCssClass="watermarked roundedcorner" />
<asp:TextBox ID="ConfirmEmail" runat="server" Columns="48" CssClass="roundedcorner"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ConfirmEmail" ErrorMessage="Confirm E-mail is required." ToolTip="Confirm E-mail is required." ValidationGroup="UserInformation"><font color="red">*</font></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ForeColor="red" ControlToValidate="ConfirmEmail" ValidationGroup="UserInformation" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
</td>
</tr>
И след това скрипта от страна на сървъра. Това има точка на прекъсване на всеки ред и НИТО един от тях никога не е ударен. Така че предполагам, че методът никога не се задейства.....
protected void checkEmailValidator_ServerValidate(object sender, ServerValidateEventArgs args)
{
args.IsValid = false;
}
А ето го и бутона за преминаване към следващата част на формата. Той просто скрива един div и показва друг, за да продължи процеса на регистрация.
<asp:ImageButton ID="NextButton" runat="server" ImageUrl="images/registration/arrowright.png"
ClientIDMode="Static" AutoPostBack="False" OnClientClick="return false;"
Height="50px" onmouseover="this.src='images/registration/arrowrightgreen.png'"
onmouseout="this.src='images/registration/arrowright.png'" ValidationGroup="UserInformation" UseSubmitBehavior="False"/>
Този бутон се използва за преминаване към втора част от процеса на регистрация, за която използвам jQuery. Ето защо редът OnClientClick="return false;"
е там, така че jQuery ще работи правилно. Има ли някъде около това?
$("[id$=NextButton]").click(function (e) {
//alert(Page_ClientValidate("UserInformation"));
if (Page_ClientValidate("UserInformation")) {
$("[id$=pick_user_type]").css('position', 'absolute');
$("[id$=registration_div]").css('position', 'absolute');
$("[id$=registration_div]").hide('slide', { direction: 'left' }, 1000);
$("[id$=pick_user_type]").show('slide', { direction: 'right' }, 1000);
}
});