【发布时间】:2017-06-07 15:55:47
【问题描述】:
在我的索引中,我添加了一个搜索字段。
当用户输入搜索词并单击过滤时,索引(Index)被过滤。 到目前为止,一切都很好。
我想要实现的是,如果用户在同一个控制器中执行其他操作(编辑、详细信息、删除等)并返回索引,我希望恢复搜索。
为此,我使用了TempData,但没有成功。
在各种论坛/教程中,我发现关于生命周期的矛盾。 有人说:
放置在 TempData 中的对象的生命周期恰好是一个额外的 要求。
在我发现的另一个网站上:
存储在 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 是如何工作的(直到重新阅读或收到一个令人上瘾的请求)?
【问题讨论】:
-
TempData 建立在 session 之上,所以你必须注册
Session并记住它基于 cookie 的本质 docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state -
已经知道这个信息了。
标签: asp.net session search asp.net-core tempdata