Asp.net core mvc 使用RedirectToAction传递TempData

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

简介: 我是一名.NET学生,试图学习ASP.NET核心MVC。所以请谅解。我在网上搜索了我的问题的答案,但还没有找到适合我的解决方案

问题: 我想在创建帖子时,将一条验证消息从我的createpost方法传递到index-IActionmethod,并将其显示为当前的警报消息。我在网上读到,ViewBag无法通过重定向,但TempData可以。这是到目前为止我的代码

创建post方法:

 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()
method
app.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的提供程序,您需要额外的努力才能将提供程序交换为基于会话的提供程序。