【问题标题】:Maintaining ViewBag values while posting data在发布数据时维护 ViewBag 值
【发布时间】:2015-12-11 12:35:04
【问题描述】:

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

这是一个场景..

-在控制器中

ViewBag.Name = "aaaa";

-在视图中

@ViewBag.Name

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

-在HttpPost方法中

ViewBag.Name="bbbb";

【问题讨论】:

  • 值会在视图中改变
  • 自己调试检查
  • 避免使用 ViewBag,您应该为此类请求使用视图模型

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


【解决方案1】:

您在操作方法上设置的 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" />
}

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

[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 等动态内容在您的操作方法和视图之间传输数据。您应该使用强类型视图和视图模型模型。

【讨论】:

  • 会有安全问题,可以编辑隐藏字段的值。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多