Я хотел бы создать модель представления для нового пользователя, используя код ниже. Класс «Пользователь» содержит только два свойства (пока упрощенно), которые я сохраню в базе данных; модель представления добавляет поле «сравнить пароль», которое используется только в представлении. Я бы предпочел, чтобы модель представления использовала класс «Пользователь» напрямую, а не повторяла все поля, определенные в «Пользователь».
У меня вопрос: как правильно ссылаться на «User.Password» в атрибуте [Compare] для поля «ComparePassword»?
public class User
{
[Required]
public string UserName { get; set; }
[Required]
[DisplayName("Password")]
[DataType(DataType.Password)]
public string Password { get; set; }
}
public class NewUserViewModel
{
public User User { get; set; }
[Required]
[DataType(DataType.Password)]
[DisplayName("Re-enter Password")]
[Compare("Password", ErrorMessage="Passwords must match")]
public string ComparePassword { get; set; }
}
HTML-код, который создается для «Password» и «ComparePassword», приведен ниже.
<input class="text-box single-line password"
data-val="true"
data-val-required="The Password field is required."
id="User_Password"
name="User.Password"
type="password" value="" />
<input class="text-box single-line password"
data-val="true"
data-val-equalto="Passwords must match"
data-val-equalto-other="*.Password"
data-val-required="The Re-enter Password field is required."
id="ComparePassword"
name="ComparePassword"
type="password" value="" />
Ключ в том, как " data-val-equalto-other " обрабатывается Javascript. Если я использую « Password » или « User_Password », ничего не происходит - проверка не выполняется. Если я использую « User.Password », проверка выполняется, но всегда завершается неудачей.
У меня нет особых проблем с выполнением этого непосредственно в jQuery, но я бы предпочел использовать атрибут [Compare], если это вообще возможно.