Frage

Dies scheint, wie es eine einfache Lösung haben sollte, aber ich kann nicht scheinen, um es zu finden.

Ich bin mit dem ChangePassword Steuerelement in einer ASP.NET 2.0-Anwendung, sowohl die ChangePasswordTemplate und SuccessTemplate mit benutzerdefiniertem Styling zu definieren. Die Textfelder haben IDs wie folgt

Aktuelles Passwort Textbox ID = CurrentPassword
Neues Passwort Textbox ID = NewPassword
Neues Kennwort bestätigen Textbox ID = ConfirmPassword

Für DRY Gründen möchte ich den regulären Ausdruck verwenden, die im Custom Membership Provider definiert ist, das neue Passwort Client-Seite zu überprüfen. Leider Eigenschaft, Einstellung der ChangedPassword Steuerung wie folgt

ChangePassword.NewPasswordRegularExpression = 
    Membership.PasswordStrengthRegularExpression;
ChangePassword.NewPasswordRegularExpressionErrorMessage = 
    "Regex Error Message";

in Page_Init setzt den Ausdruck auf den erwarteten Wert, aber nicht Ursache Client-Seite Validierung auf das neue Passwort geschehen (die Seite Beiträge zurück und der Standard-Mitgliedschaft ChangePassword Ausfall Text wird angezeigt).

konnte ich eine RegularExpressionValidator im ChangePasswordTemplate verwenden und die ValidationExpression Eigenschaft auf Membership.PasswordStrengthRegularExpression gesetzt, aber die beste Art und Weise, dass ich sehen kann, erfordert dies zu tun Rekursion durch die Steuerelemente in der Vorlage die RegularExpressionValidator zu finden und die Eigenschaft festlegen, die mich glauben macht, dass es einen eleganteren Weg sein. Ich habe andere Validator Steuerelemente in der Vorlage (Pflichtfelder und vergleichen Validator), falls dies kann einen Konflikt mit Verwendung der ChangePassword Validierungseigenschaften verursachen.

Meine Frage ist dann, tut die ChangePassword Kontrolle des NewPasswordRegularExpression Eigenschaft der Arbeit, wenn Vorlagen verwenden oder muss ich die RegularExpressionValidator Steuer Weg gehen?

EDIT:

ein Kopfgeld auf diese Angeboten, wie ich keine definitive Antwort auf die Frage, warum die ChangePassword Kontrolle des NewPasswordRegularExpression Eigenschaft nicht Validate Client-Seite finden.

War es hilfreich?

Lösung

Wenn Sie „Convert to Template“ verwenden, wird die RegularExpressionValidator Steuerung nicht automatisch erstellt und kann daher nicht auf die letzte Seite gerendert. Dies kann durch die Anzeige der Seite Quelle bestätigt werden, bevor und nachdem auf Vorlage konvertieren.

Um ein RegularExpressionValidator hinzufügen genau wie die einer ASP.NET Anwendungen ohne die Vorlage, definieren sie zwischen dem NewPassword TextBox und dem RequiredFieldValidator wie folgt aus:

<asp:TextBox ID="NewPassword" runat="server" TextMode="Password"></asp:TextBox>

<asp:RegularExpressionValidator ID="NewPasswordRegExp" runat="server"
    ErrorMessage="RegularExpressionValidator" Display="Dynamic"
    ControlToValidate="NewPassword" ValidationGroup="ChangePassword1"></asp:RegularExpressionValidator>

<asp:RequiredFieldValidator ID="NewPasswordRequired" runat="server" 
    ControlToValidate="NewPassword" ErrorMessage="New Password is required." 
    ToolTip="New Password is required." ValidationGroup="ChangePassword1">*</asp:RequiredFieldValidator>

Sie können nicht die NewPasswordRegularExpression Eigenschaft Change verwenden den regulären Ausdruck an dieser Stelle zu ändern. Sie werden diese stattdessen zu tun haben:

protected void Page_Init(object sender, EventArgs e)
{
    RegularExpressionValidator validator
        = ((RegularExpressionValidator)(ChangePassword1.Controls[0].FindControl("NewPasswordRegExp")));

    validator.ValidationExpression = Membership.PasswordStrengthRegularExpression;
    validator.ErrorMessage = "Regex Error Message";
}

Ich hoffe, das hilft.

Andere Tipps

Leider dauerte es zu lange zurück zu kommen.

Password wird auf Server-Seite validiert. und NewPasswordRegularExpression auf Client-Seite validiert. Und hier ist der Unterschied. Durch Fehler in JSScript / VSScript REGx Validierung, wird auf dem Server überprüft wird jeder regulären Ausdruck, der nicht in browswer validiert.

Zusätzlich wird das Passwort mit NewPasswordRegularExpression als auch Password validiert erhalten. So NewPasswordRegularExpression sollte die Regel nicht brechen in Password definiert.

z.

passwordStrengthRegularExpression="^*(?=.{7,})(?=(.*\W){1,})(?=(.*\d){1,})"
NewPasswordRegularExpression="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$"

funktioniert.

Hope dies hilft Ihnen.

Aktualisieren : regex Look-Ahead-Fehler.
http://blog.stevenlevithan.com/archives/regex-lookahead-bug

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top