2013-03-20 3 views
0

В моей пользовательской проверке модели, у меня есть следующая:модель связывания ошибка проверки

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext){ 
     var repository = DependencyResolver.Current.GetService(typeof(IContactRepository)); 
     IContactRepository repo = repository as IContactRepository; 
     USRContact c = repo.GetContactByID(Convert.ToInt64(bindingContext.ValueProvider.GetValue("ContactID").AttemptedValue)); 
     c.FormalName = bindingContext.ValueProvider.GetValue("FormalName").AttemptedValue; 

     if (!repo.IsValidFormalName(c.ContactID, c.FormalName)) 
     { 
      var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 

      bindingContext.ModelState.AddModelError("FormalName", Resources.ErrorMsgs.FormalNameNotUnique); 

      return bindingContext.Model; 
     } 

     c.PreferredName = bindingContext.ValueProvider.GetValue("PreferredName").AttemptedValue; 
     c.Alias = bindingContext.ValueProvider.GetValue("Alias").AttemptedValue; 
     c.Pseudonym = bindingContext.ValueProvider.GetValue("Pseudonym").AttemptedValue; 
     c.GenderID = Convert.ToInt32(bindingContext.ValueProvider.GetValue("GenderID").AttemptedValue); 
     c.NationalityID = Convert.ToInt32(bindingContext.ValueProvider.GetValue("NationalityID").AttemptedValue); 
     c.ModifiedByID = Utilities.SessionUtil.Current.UserID; 
     c.ModifiedDate = DateTime.Now; 

}

Мой контроллер называет эту модель связующую, выполнив следующие действия:

public ActionResult Update([ModelBinder(typeof(ModelBinder.ContactModelBinder))] USR.USRContact contact) 
    { 
     if (ModelState.IsValid) 
     { 
      repository.Update(); 
      return View("~/Views/Shared/Contacts/ShowContactInfo.cshtml", repository.GetContactByID(contact.ContactID)); 
     } 
} 

}

My viewmodel содержит аннотации данных, чтобы сказать, что требуется формальное имя, и что alia s должно быть менее 60 символов. Как отображать ошибки, если привязка модели превратила ее в постоянную модель данных (USRContact), и мое представление ожидает модель обзора?

Есть ли способ убедиться, что при ошибках проверки на модели представления контроллер не преобразуется в постоянную модель данных? Даже если мы проверим все ошибки модели в объекте данных и найдем ошибки проверки, как мы отправляем пользователя обратно в представление, в котором они находились, с ошибками рядом с текстовыми полями, в которых они содержали ошибку.

Спасибо за помощь! Safris

ответ

0

Я думаю, что проблема, с которой вы можете столкнуться, заключается в том, что как только вы нажимаете эти значения на другой объект через пользовательское связующее, они уже не такие, как на странице.

Свойство под названием «PropertyValue» с Html.ValidationFor (x => x.PropertyValue) будет выглядеть в коллекции ошибок ModelState для элементов с PropertyValue.

Как только вы ввели их в Контакт, теперь значение Contact.PropertyValue. Если вы его подтвердите, то он будет добавлен в ModelState как «Contact.PropertyValue». Это будет подхвачено только Html.ValidationFor (x => x.Contact.PropertyValue)

Самое легкое решение - убедиться, что ваш вход и выход соответствуют той же структуре. Если вы можете отобразить элементы как Html.TextBoxFor (x => x.Contact.SomeProperty), тогда все будет в порядке.

Смежные вопросы