我需要帮助以了解使用tempdata时会发生什么情况。 如果我在视图中使用tempdata,如果两个用户同步转到该视图,那么tempdata会发生什么? 我的意思是,数据是否正在丢失,或者两个临时数据是否不同并且可以正常工作。
答案 0 :(得分:1)
首先,TempData基于会话,因此每个用户都拥有 自己的会话,这就是为什么两个用户在同一时间使用同一页面不会出现任何问题的原因 时间。
这是一个示例代码,您如何实现必须将会话中间件添加到ASP.NET Core Pipeline。否则,它将始终为null。您不会收到任何错误!
services.AddSession(); // Add in 'Startup.cs' file 'ConfigureServices' method
您还需要一个TempData Provider。
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>(); // Add in 'Startup.cs' file 'ConfigureServices' method
这里是cookie提供程序,这意味着所有TempData内容都将放入请求A的cookie中,并在请求B中再次读取。
现在您还必须使用会话注册:
app.UseSession(); // Add in 'Startup.cs' file 'Configure' method
最后,您的startup.cs
看起来像这样
来源
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
services.AddSession();
// Adds a default in-memory implementation of IDistributedCache.
services.AddDistributedMemoryCache();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
现在,您可以使用TempData将数据从一个动作传递到另一个动作。
public class TempDataDemoController : Controller
{
public IActionResult RequestA()
{
ViewData["MyKey"] = "Hello TempData!";
return RedirectToAction("RequestB");
}
public IActionResult RequestB()
{
return Content(ViewData["MyKey"] as string);
}
}
答案 1 :(得分:0)
TempData可用于存储可在后续请求中使用的临时数据。完成后续请求后,TempData将被清除。
当要将非敏感数据从一种操作方法传输到相同或不同控制器的另一种操作方法以及重定向时,TempData很有用。
请参考本教程-https://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc