Я хотел бы создать модель представления для нового пользователя, используя следующий код. Класс "Пользователь" содержит только два свойства (упрощенных на данный момент), которые я сохраню в базе данных; модель вида добавляет поле "сравнить пароль", которое используется только в представлении. Я бы предпочел, чтобы модель представления использовала класс "Пользователь" напрямую, а не повторяла все поля, определенные в "Пользователь" .
Мой вопрос: как правильно ссылаться на "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="" />
Ключом является то, что Javascript обрабатывает " data-val-equalto-other". Если я использую " Пароль" или " User_Password", ничего не происходит - проверка не выполняется. Если я использую " User.Password", проверка выполняется, но всегда терпит неудачу.
У меня нет реальной проблемы с этим непосредственно в jQuery, но я бы предпочел использовать атрибут [Compare], если это вообще возможно.