具有多个值的相同键的 TempData asp.net core mvc

TempData with same key with multiple values asp.net core mvc

我正在阅读 temp data 并且想知道您是否可以将 tempdata 与两个单独的键一起使用并向它们添加多个值。即

TempData["Id"] = "1";

TempData["Name"] = "Bob";

然后我们要在临时数据中添加另一组值:

TempData["Id"] = "2";
TempData["Name"] = "Jill";

在操作方法中使用它们:

public ActionResult Index()
{

    TempData["Id"] = 1;
    
    TempData["Name"] = "Bob";

    TempData["Id"] = 2;
    
    TempData["Name"] = "Jill";
}

然后在另一个操作方法中访问它,而无需覆盖键的值,只需提供最后一组 ID 和名称:

public ActionResult About()
{

    int id;
    string name;

    if (TempData.ContainsKey("Id") && TempData.ContainsKey("Name"))
    {
         id = Convert.ToInt32(TempData["Id"]);
         name = TempData["Name"].ToString();
    }

}

有没有办法在 About() 操作方法中访问它时显示 Bob 和 Jill 的 ID 以及他们的名字,而不仅仅是返回 ID 2 和名称 Jill?

此代码已使用 VS 2019 和 Newtonsoft.Json nuget 包进行测试

你可以用这种方式在临时数据中保存一个复杂的数据

public class IdName
{
 public int Id {get;set;}
public string Name {get; set;}
}

你可以像这样使用它


var idNames = new List<IdName> { 
new IdName { Name = "Bob", Id = 1 }, 
new IdName { Name = "Jill", Id = 2 } 
};
TempData["IdNames"] = JsonConvert.SerializeObject(idNames);

和你的行动

public ActionResult About()
{

if ( TempData.ContainsKey("IdNames") ) 
{
  List<IdName> IdNames =  JsonConvert.DeserializeObject<List<IdName>>( TempData["IdNames"].ToString());

    foreach( item in IdNames)
    {

        var id= item.Id;
        var name= item.Name

         // your code
    }
}