Asp.net-Core-Mvc

使用 RedirectToAction 傳遞 TempData

  • June 2, 2020

簡介:我是一名 .NET 學生,正在嘗試學習 ASP.NET Core MVC。所以請諒解。我在網上搜尋了我的問題的答案,但還沒有找到適合我的解決方案。

問題:每當創建文章時,我想將驗證消息從我的 create post 方法傳遞給索引 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");
   }

索引方法:

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);
       }

我已經嘗試過這個指南:ClickThis和這個:ClickThis2但我收到了這條消息:

錯誤頁面

我知道來自 gudie 2 號的這條線可能很重要,但現在不知​​道如何應用它。-

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

我想做的最後一件事是將它傳遞給索引視圖,但不知道如何。我目前正在從索引中傳遞一個模型。

告訴我您是否還想看什麼。比如依賴。

我得到的所有幫助都是金子,將不勝感激!!!

您是否配置了會話?TempData 在幕後使用會話。

項目.json

"Microsoft.AspNetCore.Session": "1.1.0"

這是 Startup.cs 文件。-ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
    services.AddSession();
    services.AddMvc();
}

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?}");
   });
}

現在嘗試使用 TempData,它會起作用。

您可以使用set ASPNETCORE_ENVIRONMENT=Development環境變數設置環境。

我在Google搜尋“asp.net core redirect to action tempdata”時遇到了這個問題。我找到了答案,並將其發佈在這里以供後代使用。

問題

我的問題是,在填寫一些TempData值並呼叫之後RedirectToAction()TempData我重定向到的頁面上將是空的。

解決方案

根據 HamedH 的回答如果您正在執行 ASP.NET Core 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();
}

引用自:https://stackoverflow.com/questions/41492634