这似乎应该有一个简单的解决方案,但我似乎无法找到它。

我使用在ASP.NET 2.0应用程序的控制ChangePassword,同时使用ChangePasswordTemplateSuccessTemplate定义自定义样式。文本框具有的ID如下

当前密码文本框ID = <强> CurrentPassword 结果 新密码文本框ID = <强> NEWPASSWORD 结果 确认新密码文本框ID = <强> ConfirmPassword

有关DRY原因,我想使用在自定义成员资格提供定义验证新密码客户侧的正则表达式。不幸的是,设置ChangedPassword控件的属性如下:

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

Page_Init将表达式的预期值,但不会导致客户端验证对新密码(页面回和标准会员ChangePassword失败的文本被显示)发生。

我可以在RegularExpressionValidator使用ChangePasswordTemplate并设置ValidationExpression属性Membership.PasswordStrengthRegularExpression但我可以看到要做到这一点,需要通过控制模板递归找到RegularExpressionValidator和设置属性,这使我相信,最好的办法必须有一个更优雅的方式。我在模板其他验证程序控件(需要字段和比较验证器),在此情况下,可能会导致与使用ChangePassword验证属性的冲突。

我的问题是,然后,使用模板时做的ChangePassword控制的NewPasswordRegularExpression财产的工作或我需要下井RegularExpressionValidator控制路线?

修改

中提供了一个赏金这个,因为我无法找到一个明确的答案,为什么ChangePassword控制的NewPasswordRegularExpression财产不验证客户端。

有帮助吗?

解决方案

如果您使用“转换为模板”,该控件的作用是不会自动创建,因此不渲染到最后一页。这可以通过之前查看的网页源和转换为模板后得到证实。

要添加的RegularExpressionValidator酷似一个ASP.NET使用无模板,将NEWPASSWORD TextBox和像这样的RequiredFieldValidator之间进行定义:

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

您不能使用ChangePassword的NewPasswordRegularExpression酒店在这一点上改变正则表达式。你必须要做到这一点,而不是:

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";
}

我希望这有助于。

其他提示

对不起,我花了太长时间回来。

PasswordStrengthRegularExpression在服务器端进行验证。和NewPasswordRegularExpression在客户端验证。这里的区别。由于JSScript / VSScript至REGx的验证问题,这在服务器验证每一个正则表达式不会browswer验证。

此外密码获得与NewPasswordRegularExpression验证以及PasswordStrengthRegularExpression。所以NewPasswordRegularExpression不应打破PasswordStrengthRegularExpression定义的规则。

e.g。

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

工作正常。

希望这有助于你。

更新:正则表达式先行错误。点击 http://blog.stevenlevithan.com/archives/regex-lookahead-bug

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top