gpt4 book ai didi

c# - MVC 模型验证中的变量

转载 作者:太空狗 更新时间:2023-10-30 00:26:25 26 4
gpt4 key购买 nike

因此在 MVC 中使用 .NET 成员(member)系统时,密码策略是在 web.config 文件中定义的。例如 minPasswordLength 是在 membership->profiles 中定义的。

使用 View 时,可以使用 @Membership 组件访问它

Passwords must be at least @Membership.MinRequiredPasswordLength characters long.

但是,如果您查看示例 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; }

我很好奇的部分是 MinimumLength = 6,因为这是硬编码的,这意味着如果我想更新密码长度,我不仅需要编辑网页.config(如微软建议的那样),但也在源代码中搜索对它的任何引用并在所有地方进行更改(可能不是最佳编程实践)。

有没有在属性中使用变量的方法。我怀疑不会,因为这可能发生在编译时而不是运行时。如果没有人知道更好的模式来阻止我将来不得不查找替换所有引用资料?

最佳答案

Here is an article可以帮助您回答问题。基本上,创建您自己的 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)
};
}
}

在你的 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; }

关于c# - MVC 模型验证中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11193867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com