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 になることです。当然、両方を同じ値に設定できますが、使用するだけの簡単な方法があるかどうかを知りたかったのです。それらの1つまたは両方を同期します。

私はこれを試しました:

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = Membership.MinRequiredPasswordLength)]

しかし、「属性引数は定数式でなければなりません...」というエラーが表示されます

カスタム検証属性を記述するオプションがあることは承知していますが、基本的に既存の検証ロジックを記述することになるため、これは避けたいと思います (値のソースを除く)。

または、モデルの MinimumLenght をビューに表示できますか?

変更を加える場所を 1 つだけにするにはどうすればよいですか?

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; }

まだ 2 箇所変更する必要がありますが、3 箇所以上変更するよりはましです。

誰かがこれに問題がある場合は、私に知らせてください。

于 2013-09-11T15:10:12.210 に答える