2

我正在尝试将成功消息从我的控制器操作传递到视图。但是,我尝试或遇到的任何解决方案似乎都不起作用。一个小时后试图弄清楚我做错了什么,我会在这里问。

在示例中,我使用 ViewBag,但我尝试使用 TempDate["MyMessage"] = "Some message"; 仍然一样.. View 中的值始终为空...

控制器

    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>
}
4

1 回答 1

1

RedirectToAction通话中,您通过向客户端浏览器发送“重定向”状态来重定向客户端浏览器。一旦您返回该状态并结束您的响应,您的本地状态就会丢失 - 它不会持续到下一个请求。您需要另一种“方式”来保存该信息,例如重定向到SupplierEditSuccess,例如,这将是一个假设编辑成功的视图,或者传递一个Success参数Supplier,表明最后一次编辑成功并相应地显示一条消息。

但是,在您的异常捕获中,您应该能够TempData在视图中看到 ,因此如果您故意抛出异常,this._service.Update(supplier);那么您应该能够访问TempData["UserMessage"].

编辑我写了很多关于在动作结果之间传递数据的答案“从1个ActionResult存储一个js值以在另一个ActionResult中使用”,而不是直接在我对“ViewBag和ViewData也是asp中状态管理的一部分”的回答中。网络mvc?” 这可能会帮助您为您的场景创建合适的解决方案。

于 2013-11-11T17:58:06.157 回答