Я использую сервисный слой с ModelStateWrapper, как показано здесь .
Каким образом он должен управлять ключами ошибок, чтобы использовать их при проверке в слое обслуживания, чтобы они соответствовали именам ввода в моих представлениях?
например. У меня есть следующий ViewModel для клиента:
public class CustomerViewModel
{
public string Name { get; set; }
/*…*/
}
И следующий ViewModel для некоторых вариантов использования (в этом случае пользователь может создать двух клиентов на лету, введя их имена):
public class SomeOtherUseCaseViewModel
{
public CustomerViewModel BuyingCustomer { get; set; }
public CustomerViewModel SellingCustomer { get; set; }
/*… */
}
Который я использую в представлении следующим образом:
<!-- … -->
<%: Html.EditorFor(model => model.BuyingCustomer.Name) %>
<%: Html.ValidationMessageFor(model => model.BuyingCustomer.Name) %>
<!-- … -->
<%: Html.EditorFor(model => model.SellingCustomer.Name) %>
<%: Html.ValidationMessageFor(model => model.SellingCustomer.Name) %>
В моей службе поддержки клиентов у меня есть следующий метод проверки, который вызывается при создании клиента (обратите внимание, что это другой класс Customer, это класс домена):
public bool ValidateCustomer(Customer customer)
{
/* Check if there is another customer with the same name */
if (/*…*/)
{
_validationDictionary.addError(“Name”, “There is another customer with the same name”); //the _validationDictionary holds the ModelStateWrapper
return false;
}
}
Вы видите мою проблему?
В зависимости от вида, ошибка должна быть добавлена с помощью ключа “BuyingCustomer.Name”
или “SellingCustomer.Name”
(или в конечном итоге будет две ошибки, по одной с каждым ключом) вместо просто «Имя»; в противном случае фреймворк не будет правильно выделять поля и отображать ошибки.
Как правильно решить эту ситуацию? Я не хочу передавать «префикс ключа ошибки» на сервисный уровень, потому что это касается пользовательского интерфейса, а не сервисного уровня, (правильно?).