TempData中的存储列表抛出异常

时间:2018-09-12 06:50:02

标签: asp.net-core asp.net-core-2.0

我正在尝试在.net core 2.1中的TempData中存储列表。问题是,将列表存储在tempdata中时,它不会给出任何错误,但是在return语句之后,它始终会引发异常,并把我带到ajax调用的error部分。在调试ajax调用中的错误消息时,它只会显示“错误” 这是控制器代码:

 IList<Product> productList = new List<Product>
 {
     new Product{ProductId=Guid.NewGuid().ToString(),Name="142525"},
     new Product{ProductId=Guid.NewGuid().ToString(),Name="122555"},
     new Product{ProductId=Guid.NewGuid().ToString(),Name="125255"}
 };

 TempData["Products"] = productList;
 return Json(productList);

Ajax请求:

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: '@Url.Action("Index", "Product")',
        success: function (result) {
             alert('All ok');
        },
        error: function (result, err) {
            debugger;
            alert('Something went wrong');
        }
    }); 
}); 

这是启动文件代码:

 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddSessionStateTempDataProvider();
 services.AddSession();

    app.UseStaticFiles();
    app.UseAuthentication();
    app.UseCookiePolicy();
    app.UseSession();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    }); 

我也尝试过将app.UseCookiePolicy移到app.UseMvc之后,但还是没有运气。这是Microsoft官方文档链接https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#tempdata,我已经尝试了这里提到的所有内容。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您的问题是由TempData不支持复杂类型引起的。

您可以尝试将对象序列化为字符串并将其保存在TempData中。

TempData["Products"] = JsonConvert.SerializeObject(productList);