Joh*_*ell 4 c# validation asp.net-mvc membership-provider
因此,在使用.NET Membership系统的MVC中,密码策略在web.config文件中定义.例如,minPasswordLength在membership - >配置文件中定义.
使用View时,可以使用该@Membership组件访问它
Passwords must be at least @Membership.MinRequiredPasswordLength characters long.
Run Code Online (Sandbox Code Playgroud)
但是,如果您查看示例MVC应用程序中的默认模型,它会说
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New Password")]
public string NewPassword { get; set; }
Run Code Online (Sandbox Code Playgroud)
我很好奇的部分是MinimumLength = 6因为这是硬编码的,这意味着如果我想更新密码长度,我不仅要编辑web.config(如Microsoft建议),还要搜索任何引用它在源头并在各处变化(可能不是最好的编程实践).
有没有在Attributes中使用变量的方法.我怀疑不是因为这可能发生在编译时而不是运行时.如果没有人知道更好的模式,以阻止我在将来找到替换所有引用?
这篇文章可以帮助您回答问题.基本上,创建自己的DataAnnotation,从web.config中提取最小长度.
对于后代,这里是引用网站中使用的代码:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter , AllowMultiple = false, Inherited = true)]
public sealed class MinRequiredPasswordLengthAttribute : ValidationAttribute, IClientValidatable
{
private readonly int _minimumLength = Membership.MinRequiredPasswordLength;
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, _minimumLength);
}
public override bool IsValid(object value)
{
string password = value.ToString();
return password.Length >= this._minimumLength;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new[]{
new ModelClientValidationStringLengthRule(FormatErrorMessage(metadata.GetDisplayName()), _minimumLength, int.MaxValue)
};
}
}
Run Code Online (Sandbox Code Playgroud)
在您的ViewModel上
[Required]
[MinRequiredPasswordLength(ErrorMessage = "The {0} must be at least {1} character(s) long.")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |