2014-03-13 34 views
1

我设置的值MinimunLenghtValidator修改ApplicationUserManager类我怎样才能得到MinimumLengthValidator的RequiredLength值(Microsoft.AspNet.Identity与密码)

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public ApplicationUserManager() : base(new UserStore<ApplicationUser>(new DataContext())) 
    { 
     PasswordValidator = new MinimumLengthValidator(8); 
    } 
} 

现在,我希望检索值使用,例如,在AccountViewModel验证(放眼整个StringLength线)

[Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = IWANTTHEVALUEHERE)] 
    [DataType(DataType.Password)] 
    [Display(Name = "New password")] 
    public string NewPassword { get; set; } 

任何人都可以告诉我怎么去的价值。

Regards

回答

2

属性需要一个恒定值,所以你需要硬代码它在你的StringLength属性中。或者,您可以某处声明它作为一个公共不变,可能对你ApplicationUserManager

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public const int PasswordLength = 8; 

    public ApplicationUserManager() : base(new UserStore<ApplicationUser>(new DataContext())) 
    { 
     PasswordValidator = new MinimumLengthValidator(ApplicationUserManager.PasswordLength); 
    } 
} 

然后,在您的视图模型,你可以参考相同的恒定

[Required] 
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = ApplicationUserManager.PasswordLength)] 
[DataType(DataType.Password)] 
[Display(Name = "New password")] 
public string NewPassword { get; set; } 

UserManager<T>类有一个公共PasswordValidator属性,您可以使用它来访问验证器。问题是这个属性是IIdentityValidator<string>,所以它可以使用不同类型的验证器。您需要将此属性转换为MinimumLengthValidator才能访问该验证程序的属性。你需要类似这样的代码:

int requiredLength = 0; 
ApplicationUserManager manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
var validator = manager.PasswordValidator as MinimumLengthValidator; 
if (validator != null) 
{ 
    requiredLength = validator.RequiredLength; 
} 
+0

谢谢斯科特,这对我的问题很有用。只是好奇心,你知道是否有可能获得MinimunLenghtValidator属性的值吗? – RLB

+0

@RLB:我更新了答案,以显示如何获得您想要的价值。你只是无法从'StringLength'属性中完成。 –

0

您可以从成员资格类中获取属性。

作为例子:

// System.Web.Security.Membership 
Membership.MinRequiredPasswordLength 

你也可以改变你的web.config中的值,这是我的:

<membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
    </providers> 
</membership> 
<!--<membership>