【问题标题】:Showing data in TempData在 TempData 中显示数据
【发布时间】:2021-04-04 19:23:33
【问题描述】:

控制器

public IActionResult Take() {
.......
List<List<string>> arrayList = new List<List<string>>();
List<string> brandList = new List<string>();
....
TempData["car_list"] = arrayList;
TempData["brand_list"] = brandList;
.......
return RedirectToAction("Result");
}

这样的数组列表

[{"item","item2","item5"}, {"item5","item4"}, {"item3","item","item5"}]

结果视图

@foreach (var item in TempData["car_list"] as IEnumerable<string>)
{
    @item
}
</div>

我想在“视图”上这样显示

<p>item, item2, item5</p>
<p>item5, item4 </p>
<p>item3, item, item5 </p>

我收到以下错误。

如何在“视图”上显示我的价值观

更新

控制器

    TempData["car_list"] = JsonConvert.SerializeObject(arrayList);

查看 -> 我在这里遇到错误。

无法从“对象”转换为“字符串”
@{ 
var rm =Newtonsoft.Json.JsonConvert.DeserializeObject
<List<List<string>>>(TempData["car_list"]);
}

    <div>
        @foreach (var item in rm)
        {
            <span>@string.Join(",", item)</span><br>
        }
    </div>

【问题讨论】:

  • 您的出发点是,呃,不是最佳的。将汽车 objects 发送到视图而不是字符串数组。汽车对象是汽车的一个实例。
  • @GertArnold 我是新手,我不完全理解。如果你能举个例子,我会很高兴。谢谢
  • 您使用 C#。那是你的选择。但是,您至少需要对所使用的语言有一些基本的了解。类、对象和实例等概念属于这种基本理解。如果我们无法在这个基本层面上进行沟通,我们将无法帮助您。
  • @GertArnold 我将这些数组移动到另一个视图。我将在此操作(ActionResult Take)中创建的数组重定向到“结果”视图。没有 TempData 这可能吗?我更新了控制器。
  • 注意:有不止一个 TempData 在运行,但我不能在结果视图中只显示 car_list。

标签: c# asp.net asp.net-mvc entity-framework asp.net-core


【解决方案1】:

从错误消息看来,您似乎正在使用 TempData 来存储 List&lt;List&lt;string&gt;&gt;() 对象,因此,在视图中,您可以将 TempData 转换为 List&lt;List&lt;string&gt;&gt;IEnumerable&lt;List&lt;string&gt;&gt;。代码如下(使用string.Join()方法添加分隔符):

@foreach (var item in TempData["car_list"] as List<List<string>>)
{
  <span>@string.Join(",", item)</span><br>
}

控制器中的代码:

        List<List<string>> arrayList = new List<List<string>>();
        arrayList.Add(new List<string>() { "item", "item2", "item5" });
        arrayList.Add(new List<string>() { "item5", "item4" });
        arrayList.Add(new List<string>() { "item3", "item", "item5" });
        TempData["car_list"] = arrayList;

结果如下:

编辑:

如果要序列化数组列表,可以参考以下代码:

动作方法中的代码:

    public IActionResult Take()
    {
        List<List<string>> arrayList = new List<List<string>>();

        arrayList.Add(new List<string>() { "item", "item2", "item5" });
        arrayList.Add(new List<string>() { "item5", "item4" });
        arrayList.Add(new List<string>() { "item3", "item", "item5" }); 
        // TempData["car_list"] = arrayList; 
        TempData["car_list"] = JsonConvert.SerializeObject(arrayList);

        return View();
    }

视图中的代码:

<div>  
    @{
        var rm = Newtonsoft.Json.JsonConvert.DeserializeObject<List<List<string>>>(TempData["car_list"].ToString());
    }

    <div>
        @foreach (var item in rm)
        {
            <span>@string.Join(",", item)</span><br>
        }
    </div>
</div>

输出如下:

【讨论】:

  • 嗨,我仍然遇到同样的错误。我尝试了这个解决方案,但仍然没有。 stackoverflow.com/questions/56528508/…
  • @tomclack 在控制器动作方法中,你序列化列表了吗?请检查我的控制器代码,我只是使用 arrayList 设置了 TempData,没有序列化列表。此外,尝试使用以下命令安装“Microsoft.AspNetCore.Mvc.NewtonsoftJson”:Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson,然后,您可能会遇到以下情况之一:services.AddControllers().AddNewtonsoftJson(); services.AddControllersWithViews().AddNewtonsoftJson();
  • 它没有用。我尝试按上述方式进行序列化,但出现错误。我更新了问题。
  • @tomclack 我修改了回复,如果你序列化arraylist,在View中,你应该先获取json字符串,然后使用JsonConvert.DeserializeObject将json字符串转换为List。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多