Атрибут сравнения всегда проверяется по первому элементу моего представления - PullRequest
1 голос
/ 10 октября 2011

Пожалуйста, помогите по проблеме, указанной выше.

Вот мой взгляд

    <div class="editor-label">
        @Html.LabelFor(model => model.person.UserName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.person.UserName) 
        @Html.ValidationMessageFor(model => model.person.UserName) 
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.person.Password)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.person.Password) 
        @Html.ValidationMessageFor(model => model.person.Password) 
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.person.ConfirmPassword)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.person.ConfirmPassword) 
        @Html.ValidationMessageFor(model => model.person.ConfirmPassword) 
    </div>

Вот моя модель

public abstract partial class Member
{
    [DisplayName("ID")]
    public string ID { get; set; }

    [Required]
    [DisplayName("Username")]
    public string UserName { get; set; }

    [DisplayName("Date Applied")]
    public System.DateTime? DateApplied { get; set; }

    [DisplayName("Date Membered")]
    public System.DateTime? DateMembered { get; set; }

    [DisplayName("Member Type")]
    public int MemberTypeFlag { get; set; }

    [Required]
    [DisplayName("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; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}


public class Person : Member
{
    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [DisplayName("Date Of Birth")]
    public System.DateTime DateOfBirth { get; set; }
}

И моя модель взгляда ..

public class PersonInformation
{
    public Person person { get; set; }
    public Address premiseAddress { get; set; }
    public Address billingAddress { get; set; }
 }

В этом случае .. мой подтверждающий пароль будет проверен на моем элементе имени пользователя в представлении ..

Любая помощь будет высоко оценена.

Спасибо

Поскольку мой первый элемент в представлении - это поле имени пользователя ... мое поле подтверждения пароля будет проверяться в этом поле, а не в поле пароля.

Мой код будет производить что-то вроде этого.

 USERNAME : ADMIN
 PASSWORD : PASSWORD
 CONFIRM  : PASSWORD **<< this will states that "The password and confirmation password do not match."

НО, если я введу что-то вроде этого

 USERNAME : ADMIN
 PASSWORD : PASSWORD
 CONFIRM  : ADMIN

Ошибка проверки исчезла, но она не должна так себя вести.

Вот сгенерированный код HTML ..

    <div class="editor-label">

        <label for="person_Password">Password</label>

    </div>

    <div class="editor-field">

        <input class="text-box single-line password" data-val="true" data-val-length="The Password must be at least 6 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="The Password field is required." id="person_Password" name="person.Password" type="password" value="" /> 

        <span class="field-validation-valid" data-valmsg-for="person.Password" data-valmsg-replace="true"></span> 

    </div>



    <div class="editor-label">

        <label for="person_ConfirmPassword">Confirm password</label>

    </div>

    <div class="editor-field">

        <input class="text-box single-line password" data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="*.Password" id="person_ConfirmPassword" name="person.ConfirmPassword" type="password" value="" /> 

        <span class="field-validation-valid" data-valmsg-for="person.ConfirmPassword" data-valmsg-replace="true"></span> 

    </div>

Контроллер

    public ActionResult PersonInformation()
    {
        var pi = new PersonInformation();
        pi.MemberContacts = pi.LoadMemberContacts();
        return View(pi);
    }

    [HttpPost]
    public ActionResult PersonInformation(PersonInformation member)
    {
        if (ModelState.IsValid)
        {
            MembershipCreateStatus createStatus;
            db.Apply(member, out createStatus);
            if (createStatus == MembershipCreateStatus.Success)
            {
                ModelState.Clear();
                IEnumerable<MemberRequirement> mr = member.person.MemberRequirements;

                return View("Requirements", mr);
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }

        }
        return View(member);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...