0

首先,我对 MVC 相当陌生,但在 MVC3 中有一个现有项目并在使用 MVC4,因此对这两个版本的答案表示赞赏。

在我的 mvc 视图中,我有这一行:

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

但得到错误'一个属性参数必须是一个常量表达式,......'

我知道编写自定义验证属性的选项,但我想避免这种情况,因为我基本上会编写已经存在的验证逻辑(值的来源除外)

或者,我可以在视图中显示模型的最小长度吗?

我怎么能只有一个地方进行更改?

4

2 回答 2

2

我不确定是否有更直接的方法(因为它必须是一个常量值),但是您可以编写自己的 CustomValidationAttribute并检查其中的 web.config 值。

于 2012-07-18T23:26:31.507 回答
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 个或更多要好。

如果有人看到这方面的任何问题,请告诉我。

于 2013-09-11T15:10:12.210 回答