C# TempData,ViewBag,什么都不起作用

C# TempData,ViewBag,什么都不起作用,c#,asp.net-mvc,asp.net-mvc-4,session-variables,C#,Asp.net Mvc,Asp.net Mvc 4,Session Variables,我正在尝试将成功消息从控制器操作传递到视图。 然而,我尝试或遇到的任何谷歌解决方案似乎都不起作用。在一个小时试图找出我做错了什么之后,我会在这里问你 在这个例子中,我使用了ViewBag,但我尝试了TempDate[“MyMessage”]=“Some message”;还是一样。。视图中的值始终为空 控制器 public ActionResult EditSupplier(Supplier supplier) { try {

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

在这个例子中,我使用了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>
}
@if(ViewBag.UserMessage!=null)
{
@ViewBag.UserMessage.ToString()

}
重定向到操作
调用中,通过向客户端浏览器发送“重定向”状态,使其重定向。当您返回该状态并结束响应时,您的本地状态将丢失-它不会一直保留到下一个请求。您需要另一种“方法”来保存该信息,例如重定向到
suppliereditsucture
,该视图假设编辑成功,或者将
Success
参数传递给
供应商,该参数表示上一次编辑成功,并相应地显示消息

但是,在异常捕获中,您应该能够在视图中看到
TempData
,因此,如果您故意在
之后抛出异常,那么。_service.Update(supplier)
那么您应该能够在
TempData[“UserMessage”]
中访问该消息


编辑在我的回答中,我写了很多关于在操作结果之间传递数据的内容,而在我的回答中,这些内容可能会帮助您为您的场景创建合适的解决方案。

@devH,我在中介绍了所有不同的状态机制,这些机制适用于不同的场景,这可能会对您有所帮助