1

次のモデルを使用して、ユーザー入力を制御し、登録します。しかし、同じパスワードを入力してボタンを押すと、確認パスワードが間違っているというメッセージが表示されます。

他のページでも機能するため、モデルが正しいと確信しています。この場合、 RegisterModelSecondEventFrontEndViewModelのメンバーです。

したがって、コメント[Compare("RegisterModel.Password", ErrorMessage = "The password and confirmation password do not match.")]すると機能しますが、確認は必要ありません!

それを修正する方法の手がかりはありますか?

public class EventFrontEndViewModel
    {
        public Page CurrentPage { set; get; }

        public List<Event> Events { set; get; }

        public List<Event> SubscribedEvents { set; get; }

        public RegisterModelSecond RegisterModel { set; get; }

        public EventFrontEndViewModel()
        {
            CurrentPage = new Page();
            Events = new List<Event>();
            RegisterModel = new RegisterModelSecond();
            SubscribedEvents = new List<Event>();
        }
    }

モデル登録

public class RegisterModelSecond
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

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

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

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

とHTML

<div class="editor-label">
                                        @Html.LabelFor(m => m.RegisterModel.Password)
                                    </div>
                                    <div class="editor-field">
                                        @Html.PasswordFor(m => m.RegisterModel.Password)
                                        @Html.ValidationMessageFor(m => m.RegisterModel.Password)
                                    </div>
                                    <div class="clear">
                                    </div>
                                    <div class="editor-label">
                                        @Html.LabelFor(m => m.RegisterModel.ConfirmPassword)
                                    </div>
                                    <div class="editor-field">
                                        @Html.PasswordFor(m => m.RegisterModel.ConfirmPassword)
                                        @Html.ValidationMessageFor(m => m.RegisterModel.ConfirmPassword)
                                    </div>
                                    <div class="clear">
                                    </div>
4

1 に答える 1

2

私はここで正しい答えを見つけましたMVC 3 クライアント側の比較検証

これは、クライアント側の検証スクリプト jquery.validate.unobtrusive.js のバグです。

行 ~284 で、これを見つけることができます:

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];

これを次のように変更します。

element = $(options.form).find(":input[name='" + fullOtherName + "']")[0];

name 属性には一重引用符が必要です。


MIN バージョンを使用している場合は、そこでも変更する必要があることを追加したいと思います。

于 2012-04-15T11:55:08.387 に答える