簡體   English   中英

Asp.net Core Mvc6 臨時數據列表<string>一片空白</string>

[英]Asp.net Core Mvc6 TempData List<string> is null

我正在做一個 Asp.Net Core MVC6 應用程序。

我正在使用 TempData 從視圖中使用它

我正在這樣使用。

private async void CreateClaimsByUserRole(string role, string usertType)
        {
            List<string> permission = await _iUIConfig.CreateClaimsByUserRole(role, usertType);
            TempData["MyList"] = permission;
            TempData.Keep();
        }

我正在保存一個List<string>

這是一些其他功能

  public async Task<List<string>> CreateClaimsByUserRole(string role, string usertType)
        {
            List<RolesAccessModel>? oResponse = await GetRolesPerApplication();
            List<string> permissions = TransformRowsIntoPermissions(oResponse,role, usertType);
            return permissions;
        }

private List<string> TransformRowsIntoPermissions(List<RolesAccessModel>? rows, string role, string usertType)
        {
             List<string> permissionList = new();
            if(rows!=null)
            { 
                foreach (RolesAccessModel row in rows)
                {
                    if (row.Roles!=string.Empty && row.Roles != null && !row.Roles.Contains(role))
                        continue;
                    if (row.UserType != string.Empty && row.UserType != null && !row.UserType.Contains(usertType))
                        continue;

                       // if we hget here we have a match
                       if (!permissionList.Contains(row.EventName))
                        permissionList.Add(row.EventName);
                }
            }
            return permissionList;
        }

正如這里所說

我可以用相同的方法做到這一點並且工作正常..

List<string> SomeList = TempData["MyList"] as List<string>;

但是如果我想在另一個方法中檢索數據,它是空的..

檢索數據的唯一方法是使用

var SomeList = TempData["MyList"] ;

我需要從視圖中檢索數據,我有同樣的問題

 @if (TempData["Claims"] != null)
    {
        var claims = TempData["MyList"] as List<string>;
       
            @foreach (string permission in claims)
            {
                <p>@permission</p>
            }
    }

其中var claims = TempData["MyList"] as List<string> ; 一片空白

閱讀頁面,我還添加了 Program.cs

builder.Services.Configure<CookieTempDataProviderOptions>(options => {
    options.Cookie.IsEssential = true;
});

但還是不行。

我缺少什么?

謝謝

它與序列化/反序列化問題有關,如果您不嘗試使用簡單類型,我建議您在將其添加到字典之前對其進行序列化

如果您嘗試如下:

List<decimal> strlist = new List<decimal> { 1, 2, 3 };
TempData["SomeList"] = strlist;

你會得到一個錯誤:

在此處輸入圖像描述

它表示您的 TempDataDictionary 在附加到 cookie 之前將被序列化

對於復雜類型,您可以嘗試如下:

 List<string> strlist = new List<string> { "q", "w", "e" };
 var jsonstr= JsonSerializer.Serialize(strlist);                
 TempData["SomeList2"] = jsonstr; 

反序列化:

var tempobj2 = TempData["SomeList2"];
var list = JsonSerializer.Deserialize<List<string>>(tempobj2 as string);

並且您可以將該值轉換為 string[] 表示它已被序列化/反序列化,如下所示:

List<string> strlist = new List<string> { "q", "w", "e" };
var jsonStr= JsonSerializer.Serialize(strlist);
var obj = JsonSerializer.Deserialize<string[]>(jsonStr) as object;

在此處輸入圖像描述

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM