我有一个需要回答的逻辑问题!!
这是一个场景..
-In controller
ViewBag.Name = "aaaa";
- 在视图中
@ViewBag.Name
"在我的控制器中,我为ViewBag设置了值,并从VIew中的ViewBag中检索了值。现在在View中,我有一个按钮,它将一些数据发布到HttpPost方法。在HttpPost方法中,我更改了ViewBag的值。因此,在执行该方法之后,viewbag中的值将会改变或不会改变当前视图?"
- 在HttpPost方法中
ViewBag.Name="bbbb";
答案 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
。不确定你的问题在这里。