【问题标题】:Asp.net Core TempData lifetime and search termAsp.net Core TempData 生命周期和搜索词
【发布时间】:2017-06-07 15:55:47
【问题描述】:

在我的索引中,我添加了一个搜索字段。

当用户输入搜索词并单击过滤时,索引(Index)被过滤。 到目前为止,一切都很好。

我想要实现的是,如果用户在同一个控制器中执行其他操作(编辑、详细信息、删除等)并返回索引,我希望恢复搜索。

为此,我使用了TempData,但没有成功。

在各种论坛/教程中,我发现关于生命周期的矛盾。 有人说:

放置在 TempData 中的对象的生命周期恰好是一个额外的 要求。

看到这个stackoverflow article

在我发现的另一个网站上:

存储在 TempData 中的数据将在 cookie 中有效,直到您读取它 来自 TempData 字典。

看到这个article

那么真相在哪里: 只有一个子请求或当我读取 TempData 时?

我的测试显示第二个:“直到您阅读它”(或过期时)

这是我的启动代码

public void ConfigureServices(IServiceCollection services)
{
    // [..]
    // Relevant code only
    services.AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        // Set a short timeout for easy testing.
        options.IdleTimeout = TimeSpan.FromMinutes(15);
        options.CookieHttpOnly = true;
    });

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{

    // [..]
    // Relevant code only

    app.UseSession();

}

在我的控制器上

public async Task<IActionResult> Index(int page, string search)
{
    search = search ?? TempData["Search"]?.ToString();
    // Query with search data

    TempData["search"] = search;
}

如果我在这个控制器上搜索 TempData 保存搜索词。

如果在列表中搜索后导航到其他页面然后返回此处,则搜索词仍然存在

我已经知道存在 .Keep、.Peek 和其他管理TempData的方法

问题

  • 如何管理动作之间的搜索词?
  • TempData 是如何工作的(直到重新阅读或收到一个令人上瘾的请求)?

【问题讨论】:

标签: asp.net session search asp.net-core tempdata


【解决方案1】:

从许多较早的 Stack Overflow 帖子和文章来看,TempData 似乎只持续到以前版本的 ASP.NET 中的下一个请求。然而,根据微软的说法,.NET Core 并非如此:

ASP.NET Core 公开 Razor 页面 TempData 或控制器 TempData。此属性存储数据,直到它在另一个请求中读取Keep(String)Peek(string) 方法可用于在请求结束时检查数据而不删除。 Keep 将字典中的所有项目标记为保留。

我反复看到的关于 TempData 的另一个说法是它是如何使用会话实现的,但这不是 .NET Core 的默认机制:

默认启用基于 cookie 的 TempData 提供程序。要启用基于会话的 TempData 提供程序,请使用 AddSessionStateTempDataProvider 扩展方法。

来源: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-3.1#tempdata

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多