MVC3 Сравнить атрибут и свойства вложенного объекта - PullRequest
3 голосов
/ 20 марта 2012

У меня есть следующее:

public class Address 
{
    public string Email { get; set; }
}

public class CheckoutViewModel 
{
    public Address Address { get; set; }

    [Compare("Address.Email", ErrorMessage = "The email addresses you entered do not match")]
    public string ConfirmEmailAddress { get; set; }
}

С JS на стороне клиента это работает и корректно проверяется. Тем не менее, при тестировании без включенного JavaScript, форма отправляет обратно, но ошибка ModelState читает:

Не удалось найти свойство с именем Address.Email.

Есть идеи, почему это работает на клиенте, а не на сервере? Какое решение в этом случае?

Большое спасибо.

1 Ответ

2 голосов
/ 22 марта 2012

Если вы просматриваете сгенерированный исходный код HTML, вы должны обнаружить, что элемент ввода для Email называется «Address.Email», и именно поэтому проверка работает на стороне клиента.

Однако, похоже, что атрибут не создан для обработки вложенных свойств, и поэтому на уровне сервера он не работает (так как нет свойства с именем "Address.Email"). В результате вам необходимо убедиться, что оба свойства находятся на одном уровне (либо в ViewModel, либо в классе Address).

Ваш лучший вариант, если вы, вероятно, добавите свойство адреса электронной почты в модель представления, а затем заполните объект Address позже.

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