我有一个控制器,它可以在一个视图中提取学生列表并显示,我的控制器操作的一部分是将学生存储在一个列表中,然后是一个TempData变量。然后我将其重定向到不同的操作以在视图中显示列表:
var StudentsList = (from s in data.vwStudents.Where(a => a.StudentID == Id)
group s by s.StudentName into g
select g.Key).ToList();
TempData["StudentsList"] = StudentsList;
return RedirectToAction("DisplayStudents");
我将TempData [“StudentList”]变量传递给另一个Controller Action:
[HttpGet]
public ActionResult DisplayStudents()
{
ViewData["StudentsList"] = TempData["StudentsList"];
return View();
}
以下是我在视图中显示学生的方式:
<%= ViewData["StudentsList"]%> <br /><br />
问题是,我无法看到学生,相反,我看到了:
System.Collections.Generic.List`1[System.String]
在将TempData传递给视图之前,是否需要将其转换为列表?还是我在视图中这样做?另外,如何将TempData变量转换为列表?
提前致谢
答案 0 :(得分:4)
使用以下内容:
string.Join(",",(List<string>)ViewData["StudentsList"])).ToArray());
答案 1 :(得分:2)
你所拥有的是一个名单,而不是一个名字;如果您的模型只是一个字符串,引擎可以将其转储到页面上并称之为好。但它不知道如何处理列表,因为有很多方法可以安排类似的事情。
它不知道你想要什么:以逗号分隔的列表?一堆子弹点?一张桌子?引擎不知道,所以它放弃并要求您提供说明。
所以你需要告诉视图如何显示你的列表。你如何做到这一点取决于你,但我会给你一个例子。我对Razor引擎比较熟悉,所以我会用这种语法尝试这个:
<ul>
@foreach (string name in (List<string>)ViewData["StudentsList"])
{
<li>@name</li>
}
</ul>
这应该生成一个项目符号列表的学生姓名。如果你想要不同的格式,只需使用div或其他东西而不是ul / li构造。