首先,我对MVC很新,但是在MVC3中有一个现有的项目并且玩MVC4,所以对这两个版本的答案都很感激。
在我的mvc View中我有这一行:
Passwords must be at least @Membership.MinRequiredPasswordLength characters long.
在模型中我有这个:
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
(这些是为MVC模板项目自动生成的)
我的web.config MembershipProvider具有以下属性:
minRequiredPasswordLength="8"
这个问题是用户将被告知最小长度为8但实际验证将为6。 当然,我可以设置两个相同的值,但我想知道是否有一种简单的方法只使用其中一个或同步它们。
我试过这个:
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = Membership.MinRequiredPasswordLength)]
但得到错误'属性参数必须是常量表达式,...'
我知道编写自定义验证属性的选项,但我想避免这种情况,因为我基本上会编写已经存在的验证逻辑(除了值的来源)
或者,我可以在视图中显示模型的MinimumLenght吗?
我怎样才能只有一个地方可以进行更改?
答案 0 :(得分:2)
我不确定是否有更简单的方法(因为它必须是常量值),但you could write your own CustomValidationAttribute并检查其中的web.config值。
答案 1 :(得分:0)
我不确定这是不是一个好方法,但这就是我所做的......
将此信息放入MembershipHelper.cs:
namespace System.Web.Security
{
public static class MembershipHelper
{
public const int MinRequiredPasswordLength = 6;// Membership.MinRequiredPasswordLength is defined in Web.Config
public const int MaxRequiredPasswordLength = 30;
}
}
然后在视图中你可以这样做:
<p>
Passwords must be at least @MembershipHelper.MinRequiredPasswordLength characters long.
</p>
在模型中,您可以这样做:
[Required(ErrorMessage = "Field is required.")]
[StringLength(MembershipHelper.MaxRequiredPasswordLength, ErrorMessage = "Must be between {2} and {1} characters long.", MinimumLength = MembershipHelper.MinRequiredPasswordLength )]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
我仍然需要在两个地方更改它,但这比3个或更多更好。
如果有人发现任何问题,请告诉我。