发布数据时维护ViewBag值

本文关键字:维护 ViewBag 数据 布数据 | 更新日期: 2023-09-27 18:26:34

我有一个逻辑问题需要回答!!

这是一个场景。。

-控制器内

ViewBag.Name = "aaaa";

-查看

@ViewBag.Name

"在我的控制器中,我已经为ViewBag设置了值,并从VIew中的ViewBag中检索了值。现在在VIew中,我有一个按钮,它将一些数据发布到HttpPost方法。在HttpPost方法中,我更改了ViewBag的值。因此,在执行该方法后,ViewBag内的值是否会更改当前视图??"

-在HttpPost方法中

ViewBag.Name="bbbb";

发布数据时维护ViewBag值

您在操作方法上设置的ViewBag数据将仅对您正在使用的即时视图可用。当您将其发布回服务器时,它将不可用,除非您将其保存在表单中的隐藏变量中。这意味着,在HttpPost操作方法中更改ViewBag数据后,您可以在视图中看到您正在返回

public ActionResult Create()
{
  ViewBag.Message = "From GET";
  return View();
}
[HttpPost]
public ActionResult Create(string someParamName)
{
  ViewBag.Message = ViewBag.Message + "- Totally new value";
  return View();
}

假设您的视图正在打印ViewBag数据

<h2>@ViewBag.Message</h2>
@using(Html.BeginForm())
{
  <input type="submit" />
}

结果将是

对于您的GET Aciton,它将打印"From GET"

用户提交表单后,会打印"Totally new value";

如果您希望公布以前的查看行李数据,请将其保存在隐藏的表单字段中。

<h2>@ViewBag.Message</h2>
@using(Html.BeginForm())
{
  <input type="hidden" value="@ViewBag.Message" name="Message" />
  <input type="submit" />
}

以及您的操作方法,我们将接受隐藏字段值以及

[HttpPost]
public ActionResult Create(string someParamName,string Message)
{
  ViewBag.Message = ViewBag.Message + "- Totally new value";
  return View();
}

结果将是

对于您的GET Aciton,它将打印"From GET"

用户提交表单后,会打印"From GET-Totally new value";

尽量避免像ViewBag/ViewData这样的动态内容在操作方法和视图之间传输数据。您应该使用强类型视图和视图模型。

ViewBag无法在请求中存活。发布后唯一存在的数据是您发布的数据,其中不包括ViewBag。不确定你的问题是什么。