首页 > 解决方案 > 为什么 tempdata 属性在第一次读取后保留?

问题描述

它假设 tempdata 读取一次并被处理,并且在使用它作为属性之前没问题,现在使用它就像属性一样,它在第一次读取后保留到下一个请求这里是我的示例代码页面 A

public class AModel : PageModel
    {
        [TempData]
        public string Message { get; set; }
        public void OnGet()
        {
            Message = "test Page A";
        }
    }

<h1>A</h1>
    
<p>@Model.Message</p>

<a asp-page="b">Page B</a>

B页

    public class BModel : PageModel
{
    [TempData]
    public string Message { get; set; }

    public void OnGet()
    {
    }
}

<h1>B</h1>

<p>@Model.Message</p>

<a asp-page="A">Page A</a>

当从页面 A 导航到页面 b 时,它不应该显示来自页面 A 的消息,但我得到消息出现在页面 B 结果看起来像这样

B 测试页 A

页面 A

标签: asp.net-corerazor-pagestempdata

解决方案


从页面 A 导航到页面 b 时,不应显示来自页面 A 的消息

如果您使用以下代码进行测试,您会很容易发现其中的代码片段@Model.Message没有A.cshtml读取 TempData 值。

<h1>A</h1>

using TempData["Message"]: <p>@TempData["Message"]</p>
<hr />
using Model.Message: <p>@Model.Message</p>
<hr />
using TempData.Peek("Message"): <p>@TempData.Peek("Message")</p>
<hr />
using Model.Message: <p>@Model.Message</p>

<a asp-page="b">Page B</a>

上述测试的输出

在此处输入图像描述

正如本文档中提到的 TempData :

This property stores data until it's read in another request.

推荐阅读