gpt4 book ai didi

c# - 将数据从 Controller 传递到 View MVC 时为空 TempData

转载 作者:行者123 更新时间:2023-12-01 00:25:17 24 4
gpt4 key购买 nike

我在将数据传递给 View 的 Controller 中有以下类:

public ActionResult ControllerToView(){
...
TempData["example"] = "this is a message!";
...
return Redirect("http://myViewPageLink");
}

在我的 View 中,我正在尝试使用以下命令访问 TempData 字典:
@if(myCondition){
var test = TempData["example"];
<p>@test</p>
}

“myCondition”始终满足,但 TempData 字典始终为空。任何想法为什么?为了使 TempData 在 View 中可用,是否需要编写任何其他代码?

在调用我的 Controller 方法之前,我有一个对同一 Controller 中的另一个方法的 ajax 请求,这可能是有用的信息。

最佳答案

你应该知道 TempDataDictionary 用于短期实例。当下一个请求肯定会重定向到下一个 View (适用于一次性消息)时,它的值在当前和后续请求期间可用。您分配给 TempDataDictionary 的任何值后续请求完成后将被丢弃 ,作为“正常阅读”。

因此,您当前的请求包含以下序列:

  • 请求 => ActionResult (ControllerToView)
  • 套装TempDataDictionary
  • 响应 => 重定向结果
  • 请求 => 查看结果 ==> TempDataDictionary如果没有 Keep,内容可能会在此处丢弃或 Peek用于持久化数据的方法
  • 响应 => 查看(TempDataDictionary 为空)

  • 因此正确的使用方法 TempDataDictionary将值直接传递给当前请求中的 View 或使用重定向到另一个 Controller 操作方法作为后续请求,如下例:

    Controller
    public ActionResult ControllerToView()
    {
    ...
    TempData["example"] = "this is a message!";
    ...
    // returning view counts as providing response
    return View();
    }

    查看
    @if (myCondition)
    {
    var test = TempData["example"]; // showing message
    <p>@test</p>
    }

    上面例子的请求序列如下:
  • 请求 => ActionResult (ControllerToView)
  • 套装TempDataDictionary
  • 响应 => 查看( TempDataDictionary 不为空)

  • 如果您使用 RedirectResult然后尝试在 TempData 中读取/显示值没有指定“下一个操作”,它被认为是“正常读取”并且不会为下一个请求持久化。您可以使用的“下一步行动”: KeepPeek (在 View 或 Controller 操作中):
    // Keep
    var test = TempData["example"];
    TempData.Keep("example");

    // Peek
    var test = TempData.Peek("example");

    注意:如果您希望设置值在多个请求中保持不变,我强烈建议 HttpSessionState :
    // set session state
    Session["example"] = "[any value]";

    // read in another request
    var testing = Session["example"];

    引用:

    Using Tempdata in ASP.NET MVC - Best practice

    When to use ViewBag, ViewData, or TempData

    关于c# - 将数据从 Controller 传递到 View MVC 时为空 TempData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45356403/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com