1

我有一个控制器,它拉出一个学生列表并显示在一个视图中,在我的控制器操作的一部分下面,它将学生存储在一个列表中,然后存储到一个 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"] 变量传递给另一个控制器操作:

    [HttpGet]
    public ActionResult DisplayStudents()
    {
        ViewData["StudentsList"] = TempData["StudentsList"];
        return View();
    }

这是我在视图中显示学生的方式:

         <%= ViewData["StudentsList"]%> <br /><br />

问题是,我看不到学生,而是看到:

System.Collections.Generic.List`1[System.String] 

在将 TempData 传递给视图之前,我是否需要将其转换为列表?还是我在视图中这样做?另外,如何将 TempData 变量转换为列表?

提前致谢

4

2 回答 2

4

使用以下:

string.Join(",",(List<string>)ViewData["StudentsList"])).ToArray());
于 2012-04-19T16:55:21.790 回答
2

你所拥有的是一个名字列表,而不是一个名字;如果您的模型只是一个字符串,引擎可以将它原样转储到页面上并称之为好。但它不知道如何处理列表,因为有很多方法可以安排这样的事情。

它不知道你想要什么:一个逗号分隔的列表?一堆要点?一张桌子?引擎不知道,所以它放弃并要求您提供指示。

所以你需要告诉视图如何显示你的列表。你如何做到这一点取决于你,但我会给你一个例子。我对 Razor 引擎更熟悉,所以我将尝试使用该语法:

<ul>    
    @foreach (string name in (List<string>)ViewData["StudentsList"])
    {        
        <li>@name</li>        
    }    
</ul>

这应该生成一个学生姓名的项目符号列表。如果您希望它采用不同的格式,只需使用 div 或其他东西而不是 ul/li 构造。

于 2012-04-19T17:15:16.640 回答