【问题标题】:ASP.NET: Access temp data in ViewBagASP.NET:访问 ViewBag 中的临时数据
【发布时间】:2017-05-08 17:47:25
【问题描述】:

我是 ASP.NET 的初学者,并试图通过在控制器中使用临时数据来获取 ViewBag 中的数据。我在user.Usernameuser.Email 中得到了它,但分别没有在ViewBag.NameViewBag.Email 中得到它。我的代码如下所示,请指导我如何在 ViewBag 中获取它?

QuestionsContoller.cs

public class temp {
    public string username { get; set; }
    public string email { get; set; }
}

public ActionResult Question() {
    return View();
}

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Question(User user) {
    temp temp_user = new temp();
    temp_user.email = user.Email;
    temp_user.username = user.Username;
    return RedirectToAction("Answers" , temp_user);
}

public ActionResult Answers(temp temp_user) {
    User user = new Models.User();
    user.Username = temp_user.username;
    user.Email = temp_user.email;
    ViewBag.Name = user.Username;
    ViewBag.Email = user.Email;
    return View(user);
}

【问题讨论】:

  • “我怎样才能在 ViewBag 中获得它?” 是什么意思?你想把你的 ViewBag 数据放到你的视图中吗?
  • 是的,之后我会把它放在我的视图中。
  • 所以你需要知道将数据放入视图,对吧?
  • 是的...我可以在我的视图中调用它。但在此之前,我想把它放在我的 ViewBag 中。
  • 我真的不明白你需要做什么。

标签: asp.net asp.net-mvc-4 razor


【解决方案1】:

您不能使用有效负载进行重定向。重定向是一个空体响应,通常带有 302 状态代码和一个 Location 标头,指示接下来应该请求的 URL。客户端在收到这种类型的响应后,通常会继续并对该 URL 发出新请求。重要的是,客户端不会知道或关心在此请求中传递任何其他数据,因此您不能强制包含您的 temp 对象之类的内容。

如果您需要在请求之间保留该数据,可以将其添加到TempData

TempData["temp_user"] = temp_user;

然后在您重定向到的操作中通过以下方式获取它:

 var temp_user = TempData["temp_user"] as temp;

或者(并且最好),您只需使用拖曳的用户 ID 进行重定向,然后再次查找该用户。应尽可能避免使用会话(TempData)。

return RedirectToAction("Answers", new { userId = user.Id });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多