使用RedirectToAction传递TempData

All*_*Est 13 asp.net-core-mvc

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

问题:我想在创建帖子时将创建帖子方法的验证消息传递给索引IActionmethod,并且它们现在将其显示为警报消息.我在网上看到ViewBag在重定向中存活,但TempData确实如此.到目前为止这是我的代码.

创建帖子方法:

 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");
    }
Run Code Online (Sandbox Code Playgroud)

索引方法:

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);
        }
Run Code Online (Sandbox Code Playgroud)

我试过这个指南:ClickThis和this one:ClickThis2但是我收到了这条消息:

的errorPage

我知道来自2号gudie的这条线可能很重要,但现在还没有如何应用它. -

var product = TempData["myTempData"] as Product;

我想做的最后一件事是将它传递给索引视图,但不知道如何.我目前正在从索引传递一个模型.

告诉我你是否还想看到它.喜欢依赖.

我得到的所有帮助都是黄金,非常感谢!

Tod*_*all 26

我在google搜索"asp.net core redirect to action tempdata"时登陆了这个问题.我找到了答案,并将其张贴在这里供后代使用.

问题

我的问题是,在填写一些TempData值并调用之后RedirectToAction(),TempData在我重定向到的页面上将是空的.

每HamedH的答案在这里:如果您正在运行ASP.NET 2.1的核心,打开你的Startup.cs文件,并确保在您的Configure()方法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();
}
Run Code Online (Sandbox Code Playgroud)

  • 英雄!然后一个英雄伴随着力量继续前进,你将恐惧抛在一边,你知道你可以生存,所以当你感到希望已经过去时,看看你内在,变得坚强,最后你会看到一个事实,那就是英雄在说谎在你里面 (2认同)
  • 这很有帮助!谢谢!! (2认同)
  • 我尝试了各种解决方案。将 UseCookiePolicy 移到最后为我解决了这个问题。 (2认同)

Ahm*_*mar 11

你配置了Session吗?TempData在幕后使用会话.

Project.json

"Microsoft.AspNetCore.Session": "1.1.0"
Run Code Online (Sandbox Code Playgroud)

这是Startup.cs文件.- ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
{
     services.AddMemoryCache();
     services.AddSession();
     services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)

Configure方法.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseSession();
    app.UseMvc(routes => {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
Run Code Online (Sandbox Code Playgroud)

现在尝试使用TempData,它会工作.

您可以使用set ASPNETCORE_ENVIRONMENT=Development环境变量设置环境.