У меня есть приложение MVC3, которое использует службы WCF для доступа к данным.Службы WCF используют EF4.1 для доступа к данным.
Мне нужны минимальные зависимости между приложением MVC3 и службами WCF, чтобы они не разделяли библиотеки.Единственная зависимость в приложении MVC3 - это ссылка на службу.
Чтобы проверить сущности при сохранении, я определил контракты операций для служб WCF, чтобы сгенерировать FaultContract, определенный ниже:
[OperationContract]
[FaultContract(typeof(EntityFault))]
void AddAddressEntity(Address entity);
Определен EntityFaultкак показано ниже:
[DataContract(IsReference=true)]
public class EntityFault
{
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public virtual ICollection<ValidationErrorMessage> ValidationErrorMessages
{ get; set; }
}
и ValidationErrorMessage - это простой класс с двумя свойствами: PropertyName и ValidationMessage
Я перехватываю DbEntityValidationException, как показано ниже:
try
{ //....
db.SaveChanges();
}
catch (DbEntityValidationException ex)
{
EntityFault ef = EntityFaultHelper.CreateValidationFault(ex, entity);
throw new FaultException<EntityFault>(ef, ef.ErrorMessage);
}
В моем приложении MCV3Я перехватываю исключение по вине.Но как я могу отобразить сообщения об ошибках либо в
@Html.ValidationMessageFor(<my specific field>)
, либо в
@Html.ValidationSummary(...)
разделе?
Если поля модели были аннотированы, или если объект клиентареализует IValidatableObject, сообщения об ошибках отображаются в указанных областях.
Одной из идей является использование ViewBag и определение местозаполнителей дисплея для сообщений об ошибках, полученных из FaultContract WCF, и установка соответствующих динамических свойств ViewPag для полученных сообщений об ошибках.
Но мне интересно, есть ли лучший подход.
Спасибо