代码之家  ›  专栏  ›  技术社区  ›  Roxy'Pro

Asp。net MVC将数据从一种方法传递到另一种方法,然后传递到视图

  •  1
  • Roxy'Pro  · 技术社区  · 7 年前

    ActionResult 给另一个人 操作结果

    这是关于什么让我描述一下,

    我需要将值从一个方法传递到另一个方法,并且该值必须在我从另一个方法渲染的视图中可用。

    HttpPost ]编辑,它也重定向到编辑,但带有[ HttpGet ]代替[ HttpPost ]):

    TempData["Success"] = True;
    return RedirectToAction("Edit/" + customer.Id, "Customer");
    

    [HttpGet]编辑:

     if (TempData["Success"] != null && TempData.ContainsKey("Success"))
     ViewBag.Success = Convert.ToString(TempData["Success"]);
     return View(model);
    

    正如你们看到的[ ] TempData["Success"] 设置为 True ; HttpGet ]方法,并编写下一个代码:

    if (TempData["Success"] != null && TempData.ContainsKey("Success"))
     ViewBag.Success = Convert.ToString(TempData["Success"]);
     return View(model);
    

    所以我想知道为什么需要设置 TempData 后来根据它的价值 TempDate 让我们将值设置为a ViewBag ,我不能在重定向之前在我的第一个ActionResult上设置ViewBag的值,这样即使视图是从渲染/调用的,它也可以在视图上使用吗 HttpGet 行动结果?

    取而代之的是:

    TempData[“Success”]=True;
    return RedirectToAction(“Edit/”+customer.Id,“customer”);
    

    ViewBag.Success = True;
    return RedirectToAction("Edit/" + customer.Id, "Customer");
    

    或者这是需要完成的 可视包 如果我不在重定向到视图的ActionResult上添加值,那么视图上就不可用,在这种情况下,它是HttpGet而不是HttpPost(这意味着我需要在HttpGet上设置ViewBag值?)

    如果我必须这样做,我也可以使用两个ViewBag,而不是ViewBag和TempData?

    为什么有人会这样解决呢?这是正确的方法还是什么?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Win    7 年前

    我不能在之前的第一个ActionResult上设置ViewBag的值吗 重定向,使其也可以在视图中使用

    你不能,因为 因此,我们使用 临时数据 存储 短暂的 数据以持久化Http请求。

    就ASP而言,这种方法很好。NET MVC,因为我们没有其他方法来坚持 短暂的 Http请求之间的数据。

    alert extension methods

    enter image description here

    Usage

    [HttpPost]
    public ActionResult Edit(SettingModel model)
    {
       if (ModelState.IsValid)
       {
           ...
          return RedirectToAction("List")
              .WithSuccess($"Setting was updated successfully.");
       }
       return View(model);
    }
    
        2
  •  0
  •   matrixresolved    7 年前

    有两种技术可以实现Post/Redirect/Get模式。

    TempData是为单个重定向传递信息的一种方式。这种方法的缺点是,如果用户在最终重定向页面上点击刷新(F5),他将无法再提取数据,因为它将从TempData中消失,用于后续请求。

        3
  •  0
  •   Rey    7 年前

    ViewBag 可视包 可视包 TempData 因为即使进行了重定向,它也会持久化数据,但是 ,因此,如果重定向到另一个控制器,则最终会丢失在 临时数据 对象

    here