2

サインアップ時にユーザーが一致するパスワードを入力したことを検証する方法を見つけようとしています。これに使用できるMVC4データアノテーションに組み込まれているものはありますか、それともカスタム検証属性を作成する唯一のルートですか?

カスタム検証属性を作成する必要がある場合、パスワードプロパティにアクセスするにはどうすればよいですか(パスワードの確認プロパティに注釈を付けたと仮定します)。また、このタイプの検証に一般的に使用されるライブラリはありますか?

これは、カスタム検証属性の開始時に使用するものですが、パスワードプロパティにアクセスする方法がわかりません。

public class CrossFieldValidationAttribute : ValidationAttribute
{
    public override bool IsValid(object value) //how do I get the other value in here?
    {
        //validation logic here
        return base.IsValid(value);
    }
}

助けてくれてありがとう!

4

4 に答える 4

10

mvcにはすでに比較検証属性が組み込まれています。こちらのドキュメントを参照してください。

http://msdn.microsoft.com/en-us/library/system.web.mvc.compareattribute(v=vs.98).aspx

使用例は次のとおりです。

    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "Uh oh")]
    public string PasswordAgain { get; set; }
于 2013-03-17T20:05:20.287 に答える
2

カスタム属性を作成し、それらのパブリックプロパティに追加情報を設定できます。

public class CustomValidationAttribute : ValidationAttribute
{
    public string MeaningfulValidationInfo { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // do whatever meaningful with MeaningfulValidationInfo 
        return base.IsValid(value, validationContext);
    }
}

この方法で追加情報を設定します。

[CustomValidationAttribute(MeaningfulValidationInfo = "blah")]
public ActionResult Index()
{
    return View();
}

入力した両方のパスワードが同一であるかどうかを確認しようとしている場合は、モデルでそれを検証するだけです。

    public class LoginModel
    {
        [Required]
        [EmailAddress]
        public string EmailAddress { get; set; }
        [Required]
        public string Password { get; set; }
        [Required]
        [Compare("Password")]
        [Display(Name = "Confirm password")]
        public string ConfirmPassword { get; set; }
    }
}
于 2013-03-17T20:11:39.663 に答える
1

比較注釈は、このための最も簡単なオプションです。以下に示すように、属性Compareを指します。Password

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

[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
于 2014-04-24T02:57:49.943 に答える
-2

ASP.NETツールに組み込まれている*比較検証*コントロールを使用できます

以下にサンプルを提供しました

<body>
    <form id="form1" runat="server">
    <div>

    <asp:Label
        id="lblBirthDate"
        Text="Birth Date:"
        AssociatedControlID="txtBirthDate"
        Runat="server" />
    <asp:TextBox
        id="txtBirthDate"
        Runat="server" />
    <asp:CompareValidator
        id="cmpBirthDate"
        Text="(Invalid Date)"
        ControlToValidate="txtBirthDate"
        Type="Date"
        Operator="DataTypeCheck"
        Runat="server" />

    <br /><br />

    <asp:Button
        id="btnSubmit"
        Text="Submit"
        Runat="server" />

    </div>
    </form>
</body>

知識を広げるために、以下のリンクのいずれかを参照してください

http://www.java2s.com/Tutorial/ASP.NET/0160__Validation/CompareValidatorperformsthreedifferenttypesofvalidations.htm

http://www.vkinfotek.com/aspnetvalidationcontrols.html

于 2013-03-17T20:05:43.553 に答える