TempData, ViewBag, ничего не работает

Я пытаюсь передать сообщение об успешном завершении действия Controller в View. Тем не менее, любые решения, которые я пробую или натолкнулся на Google, похоже, не работают. После часа попыток выяснить, что я делаю неправильно, я спрошу здесь.

В экзамене я использую ViewBag, но я пробовал с TempDate["MyMessage"] = "Some message"; все тот же.. Значение всегда равно нулю в представлении...

контроллер

    public ActionResult EditSupplier(Supplier supplier)
    {
        try
        {
            if (ModelState.IsValid)
            {
                this._service.Update(supplier);
                ViewBag.UserMessage = "Supplier updated successfully";

            }
        }
        catch (Exception ex)
        {
            ModelState.AddModelError(String.Empty, ex.Message);
            TempData["UserMessage"] = "Error, supplier couldn't be updated";
            return View("Error");
        }
        return RedirectToAction("Supplier", new { id = supplier.SupplierId });
    }

Посмотреть

@if (ViewBag.UserMessage != null)
{
  <p>@ViewBag.UserMessage.ToString()</p>
}

1 ответ

Решение

В RedirectToAction вызов вы заставляете браузер клиента перенаправлять, отправляя ему статус "перенаправление". Ваше местное состояние теряется, как только вы возвращаете этот статус и завершаете свой ответ - оно не сохраняется до следующего запроса. Вам нужен другой "способ" сохранить эту информацию, например, перенаправление на SupplierEditSuccessНапример, это будет представление, которое предполагает, что редактирование прошло успешно, или передача Success параметр для Supplier в котором говорится, что последнее редактирование выполнено успешно и, соответственно, отображается сообщение.

Тем не менее, в пределах вашего исключения вы должны увидеть TempData в представлении, так что если вы намеренно выбросить исключение после this._service.Update(supplier); тогда вы сможете получить доступ к сообщению в TempData["UserMessage"],

Редактировать Я много писал о передаче данных между результатами действий в своем ответе на "сохранение значения js из 1 ActionResult для использования в другом ActionResult", и менее прямо в моем ответе "Является ли ViewBag и ViewData также частью управления состоянием в asp. Чистый MVC?" что может помочь вам создать подходящее решение для вашего сценария.

Другие вопросы по тегам