在发布数据时维护ViewBag值

时间:2015-12-11 12:35:05

标签: c# jquery asp.net-mvc-4 viewbag viewdata

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

这是一个场景..

-In controller

ViewBag.Name = "aaaa";

- 在视图中

@ViewBag.Name

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

- 在HttpPost方法中

ViewBag.Name="bbbb";

2 个答案:

答案 0 :(得分:9)

您在操作方法上设置的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,它会打印&#34; From GET&#34;

用户提交表单后,会打印&#34; Totally new value&#34;;

如果您希望发布以前的视图包数据,请将其保存在隐藏的表单字段中。

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

而你的Action方法,我们也会接受隐藏的字段值

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

结果将是

对于你的GET Aciton,它会打印&#34; From GET&#34;

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

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

答案 1 :(得分:4)

ViewBag无法满足请求。发布后唯一存在的数据是您发布的数据,不包括ViewBag。不确定你的问题在这里。