Asp.net core mvc 使用RedirectToAction传递TempData
简介: 我是一名.NET学生,试图学习ASP.NET核心MVC。所以请谅解。我在网上搜索了我的问题的答案,但还没有找到适合我的解决方案 问题: 我想在创建帖子时,将一条验证消息从我的createpost方法传递到index-IActionmethod,并将其显示为当前的警报消息。我在网上读到,ViewBag无法通过重定向,但TempData可以。这是到目前为止我的代码 创建post方法:Asp.net core mvc 使用RedirectToAction传递TempData,asp.net-core-mvc,Asp.net Core Mvc,简介: 我是一名.NET学生,试图学习ASP.NET核心MVC。所以请谅解。我在网上搜索了我的问题的答案,但还没有找到适合我的解决方案 问题: 我想在创建帖子时,将一条验证消息从我的createpost方法传递到index-IActionmethod,并将其显示为当前的警报消息。我在网上读到,ViewBag无法通过重定向,但TempData可以。这是到目前为止我的代码 创建post方法: public IActionResult CreatePost(string textContent, s
public IActionResult CreatePost(string textContent, string headline, string type)
{
var catType = new Category() { CategoryType = type.ToUpper() };
if (db.Category.Any(s => s.CategoryType.Trim().ToLower() == type.Trim().ToLower()))
catType = db.Category.FirstOrDefault(s => s.CategoryType.Trim().ToLower() == type.Trim().ToLower());
var newPost = new Post()
{
Content = textContent,
Header = headline,
DateOfPost = DateTime.Now,
category = catType
};
db.Posts.Add(newPost);
db.SaveChanges();
TempData["validation"] = "Your post hase been publsihed";
return RedirectToAction("Index");
}
指数法:
public IActionResult Index()
{
var validation = TempData["validation"];
var posts = (from x in db.Posts
orderby x.DateOfPost descending
orderby x.PostID descending
select x);
return View(posts);
}
我试过这个指南:还有这个:但我得到了这个信息:
我知道古迪2号的这句话可能很重要,但我现在不知道如何应用它-
var product=TempData[“myTempData”]作为产品代码>
我最不想做的事情就是将它传递到索引视图,但不知道如何传递。我目前正在传递索引中的模型
告诉我你还想看什么。比如依赖关系
我得到的所有帮助都是金子,我将非常感激 TempData
在用户会话下存储服务器端的数据。您需要启用会话(如异常消息所示)。检查
如果您不想使用会话-您需要其他方式来存储数据(cookies?您是否配置了会话?TempData正在幕后使用会话
Project.json
"Microsoft.AspNetCore.Session": "1.1.0"
这是Startup.cs文件。-<代码>配置服务
方法
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddSession();
services.AddMvc();
}
和配置
方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseSession();
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
现在尝试使用TempData,它会起作用
您可以使用
set ASPNETCORE\u environment=Development
环境变量设置环境。我在谷歌搜索“asp.net core重定向到action tempdata”时遇到了这个问题。我找到了答案,现在把它贴在这里给子孙后代
问题
我的问题是,在填写了一些TempData
值并调用RedirectToAction()
之后,我重定向到的页面上的TempData
将是空的
解决方案
根据哈米德的回答:
如果您正在运行ASP.NET Core 2.1,请打开Startup.cs文件,并确保在Configure()
methodapp.UseCookiePolicy()
位于app.UseMVC()之后代码>
例如:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
app.UseCookiePolicy();
}
我只是为在ASP.NET MVC应用程序中遇到此问题的任何人发布此消息,@Ahmar的回答让我去看看我的注销方法,我在重定向到登录页面之前使用了Session.about()
我刚刚将其更改为Session.Clear()以重置会话,而不是完全删除它,现在TempData正在以我重定向到的方法工作。提供程序 TempData使用各种提供程序来存储状态。默认情况下,使用基于cookie的数据提供程序 会话只是一种选择 如果您的应用程序不使用会话,我看不出有任何理由将其仅用于TempData store Cookie同意 ASP.NET核心2.1有一些新功能。默认情况下,数据应仅在用户同意的情况下存储在cookie中。如果用户不同意将数据存储在cookie中,TempData将无法工作。此行为因ASP NET Core的不同版本而异 如果您不想在cookie中保存任何敏感数据,显然可以更改设置
app.UseCookiePolicy(new CookiePolicyOptions
{
CheckConsentNeeded = context => false
});
您也可以在ConfigureServices中单独设置CookiePolicyOptions
。这是一个相当干净的房间
故事继续
cookies中有两种数据。基本数据(运行应用程序所需)和非基本数据(某些用户数据)。非必要数据需要用户同意。临时数据是不必要的。您可以将临时数据设置为基本数据,不再需要用户同意:
services.Configure<CookieTempDataProviderOptions>(options => {
options.Cookie.IsEssential = true;
});
services.Configure(选项=>{
options.Cookie.IsEssential=true;
});
我强烈建议在复制/粘贴之前考虑一下这个问题。我解决了另一个问题。是否可以在视图中像ViewBag一样使用TempData。现在,我在索引操作中将TempData传递给一个ViewBag?查看这篇文章,了解TempData和ViewBag之间的区别,我尝试了各种解决方案。将UseCookiePolicy移到最后解决了这一问题。这对我不起作用。。。。这在一两周前还有效,但现在没有TempData起作用。这是一个非常糟糕的建议“我将修复错误并破坏所有其他内容”。你真的不想让UseCookiePolicy中间件出现在管道的末尾。不。默认情况下,将使用基于cookie的提供程序,您需要额外的努力才能将提供程序交换为基于会话的提供程序。