2

私は次のコードを持っています

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[Display(Name = "Password")]
[DataType(DataType.Password)]
public string Password { get; set; }

[Required]
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }

フォームを表示すると、クライアント側の検証は機能しますが、サーバー側でテストすると、常に有効です(Password=pass1234およびConfirmPassword=nonmatchingpasswordで試行)

http://foolproof.codeplex.com/のEqualToのような他の属性でも試しましたが、同じ問題が発生しました。

メソッドを含めました

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model) 
{
    if (WebSecurity.IsAuthenticated)
    {
        return RedirectToAction("Index", "Home");
    }

    if (ModelState.IsValid) 
    {
        // register user...
    }

    model.Countries = this.Countries.FindAll().OrderBy(c => c.Name);
    return View(model);
}

これが私がそれをレンダリングする方法です

@using (Html.BeginForm(null, null, FormMethod.Post, new { @class = "form", @id = "register-form" }))
{
@Html.AntiForgeryToken()
<ul class="form-fields">
    ...
    <li class="form-field">
        @Html.LabelFor(m => m.Password)
        @Html.ValidationMessageFor(m => m.Password)
        @Html.EditorFor(m => m.Password)
    </li>
    <li class="form-field">
        @Html.LabelFor(m => m.ConfirmPassword)
        @Html.ValidationMessageFor(m => m.ConfirmPassword)
        @Html.EditorFor(m => m.ConfirmPassword)
    </li>
    ...     
    <li class="form-actions"> 
        <button class="submit">register</button>
    </li>
</ul>
}

何が間違っている可能性があるのか​​?MVC4RCを使用しています。

4

3 に答える 3

1

これは、MicrosoftがデフォルトのMVCプロジェクトテンプレートで行う方法です。

    [PropertiesMustMatch( "Password", "ConfirmPassword", ErrorMessage = "The                    password and confirmation password do not match." )]
    public class RegisterModel
    {
        [Required]
        [DisplayName( "User name" )]
        public string UserName { get; set; }

        [Required]
        [DataType( DataType.EmailAddress )]
        [DisplayName( "Email address" )]
        public string Email { get; set; }

        [Required]
        [ValidatePasswordLength]
        [DataType( DataType.Password )]
        [DisplayName( "Password" )]
        public string Password { get; set; }

        [Required]
        [DataType( DataType.Password )]
        [DisplayName( "Confirm password" )]
        public string ConfirmPassword { get; set; }
}

サーバー側のテストをどのように行っているのか正確にはわかりません。これがうまくいかない場合は、失敗したテストを投稿できますか?

于 2012-08-02T12:15:43.503 に答える
0

2番目のアイテムでStringLengthを取り出します。最初のアイテムはすでにそれを持っているので、あなたはそれを必要としません。

于 2012-08-01T20:20:05.270 に答える
0

パーティーに少し遅れましたが、私は同じような問題に遭遇しただけです。これは、jqueryの控えめなJavaScriptファイルのエラーが原因で発生しています。後のバージョンで修正されます。実行しました

Install-Package jQuery.Validation.Unobtrusive

v2をインストールしました。これは私にとっては問題なく動作します。あなたのマイレージは異なる場合があります。

この質問はここで適切に回答されています。

于 2013-10-09T07:11:25.757 に答える