Как я могу вернуть сообщение об ошибке в MVC, если какая-то часть моего действия не работает? - PullRequest
1 голос
/ 09 декабря 2011

У меня есть методы действия, которые делают такие вещи:

productTable.AddOrUpdate(viewModel.Account);

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

1 Ответ

4 голосов
/ 09 декабря 2011

Это не строго связано с MVC, я думаю, что это более общий вопрос о том, как правильно разработать код для управляемых непредвиденных ситуаций (или ожидаемых ошибок, генерируемых пользовательским вводом) и дать соответствующую обратную связь.

Для неожиданныхповедения мы говорим об обработке исключений.Вы помещаете свой код в блок try / catch и обрабатываете исключение в catch.

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

Теперь для некоторых MVC, касающихся того, каксделать это.Давайте рассмотрим пример кода:

[HttpPost]
[ModelStateToTempData]
public ActionResult SaveMyObject(MyObject myObject)
{
  try
  {
    if (ModelState.IsValid)
    {
      MyRepository.Save(myObject);
      return RedirectToAction("Success");
    }
    return RedirectToAction("MyForm");
  }
  catch (Exception ex)
  {
    //handle/log your exception as you see fit
    ModelState.AddModelError("Name", "Message");
    return RedirectToAction("MyForm");
  }
}

. В этом примере мы предполагаем несколько вещей:

  • Мы следуем шаблону PRG (вы можете зайти в Google) и реализуем его с помощью атрибута ModelStateToTempData из MvcContrib;
  • Мы используем метод проверки, который активируется при привязке модели (например, аннотации данных)

Это пример метода, который получитсообщение вашей формы.Данные поступают из связующего устройства, которое уже подтверждено.Если данные действительны, вы сохраняете их и перенаправляете пользователя на страницу успеха.Если данные недействительны, вы перенаправляете его обратно на метод действия, который отображает форму.Осторожно: не визуализируйте вид непосредственно отсюда: полное объяснение этого см. В шаблоне PRG.

Все это в блоке try / catch, поэтому, если что-то не получается, вы можете перехватить / обработатьсообщение об ошибке, а затем добавьте пользовательское сообщение об ошибке на страницу, затем перенаправьте пользователя на метод действия, который отображает форму, и отобразите для него ошибку.

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