Цикл проверки и обработки ошибок MVC - PullRequest
0 голосов
/ 18 октября 2011

У меня есть 2 метода действий в одном контроллере,

Индекс:

public ActionResult Index(string url)
{
   // take the url as a param and do long tasks here  
   ViewBag.PageTitle = "title";  
   ViewBag.Images = "images";  
   // and some more view bags  
   return View();
}

Это представление индекса содержит форму, которая отправляет другой метод в тот же контроллер.

public ActionResult PostMessage(string msg, string imgName)  
{  
   // save data in the db
   // but on error I want to navigate back to the Index view but without losing data the  user fielded before submit the form.
  // Also need to pass an error message to this index view to show
}

Как вернуться обратно в представление индекса, если что-то пошло не так в методе PostMessage, а также не очистить поля формы, плюс показать сообщение об ошибке, указанное в методе PostMessage.

Мне нужно знать лучшие практики для такого сценария.

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Лучшим подходом обычно является создание типа ViewModel для вашей формы. Добавьте атрибуты к свойствам этой модели, чтобы определить, что может сделать ее «неправильной». Заставьте вашу форму использовать методы типа @Html.TextBoxFor различных полей. Затем пусть ваш класс PostMessage возьмет объект этого типа, а не напрямую принимает сообщение и имя изображения. Затем вы можете проверить модель и вернуть представление снова, если модель недействительна.

См. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx для некоторых примеров кода, следующих за этим шаблоном.

1 голос
/ 18 октября 2011

Вы можете указать имя представления, которое хотите вернуть:

public ActionResult PostMessage(string msg, string imgName)  
{
    if (SomeErrorWhileSavingInDb)
    {
        // something wrong happened => we could add a modelstate error
        // explaining the reason and return the Index view.
        ModelState.AddModelError("key", "something very wrong happened when trying to process your request");
        return View("Index");
    }

    // everything went fine => we can redirect
    return RedirectToAction("Success");
}
0 голосов
/ 18 октября 2011

Просто перенаправьте обратно к действию Index

return RedirectToAction("Index");

Существуют перегрузки для этого метода, которые позволяют передавать значения маршрута и другую информацию.

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