【问题标题】:ASP.NET MVC ViewBag or TempData?ASP.NET MVC ViewBag 还是 TempData?
【发布时间】:2015-10-20 07:00:31
【问题描述】:

我在视图中有一个表单,我通过提交按钮将一些信息传递给控制器​​。在控制器中,在一个名为 SaveP 的 ActionResult 中,我想验证一些条件并将这些验证的结果传递回视图,以便在按下提交按钮后重新加载页面时显示一些内容。

代码是这样的:

 if (!(editor.ID != null && !string.IsNullOrEmpty(editor.Number) && (!ext.SID.HasValue)))
                {
                    _db.M.DeleteM(editor.PID);
                    pa.P.MID = null;
                    TempData["m"] = false; 

我希望视图仅在满足这些条件时才显示某些内容。 此外,这个名为 SaveP 的操作结果会重定向以返回 RedirectToAction("P", new { id = editor.ID });

我使用过 ViewBag,但它不起作用,但后来我发现 ViewBag 元素在重定向后不会保留。然后,我尝试使用 TempData,但它在视图中为空。我应该如何解决这个问题?谢谢!

【问题讨论】:

  • 自己创建一个模型并为其添加新属性?
  • 您如何访问重定向到的 GET 方法中的 TempData 值?您需要显示相关代码。但是,如果您只想传递一个 bool 值,那么只需在您的方法中添加一个参数并使用 RedirectToAction("P", new { id = editor.ID, myBool = false })
  • TempData 仅在控制器操作(例如重定向)之间持续存在,并且您只能访问它们一次。您重定向到的操作可以将TempData 的值添加到ViewBag

标签: asp.net asp.net-mvc


【解决方案1】:
RedirectToAction("P", new { id = editor.ID ,check = true});

和P动作会像

public ActionResult P(int id,bool check=false)
{ 
  viewBag.check = check;
}

如果你通过 check = true 你将在 P 动作中得到 true 如果你不传递任何东西,那么不要担心它的值将设置为 false。 所以如果这个方法是从多个位置调用的并且你没有通过检查参数那么就不会抛出错误......

【讨论】:

    【解决方案2】:

    这就是Model 的来源。 您可以使用模型对象将属性中的值从控制器发送到视图。在您看来,使用 HTML Helpers 将此 model 属性与您想要的元素绑定。在您的发布操作中,创建此模型对象的参数。当模型从视图中回传时,它将填充属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 2011-12-21
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多