将String转换为List

时间:2012-04-19 16:51:47

标签: c# html asp.net-mvc

我有一个控制器,它可以在一个视图中提取学生列表并显示,我的控制器操作的一部分是将学生存储在一个列表中,然后是一个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变量转换为列表?

提前致谢

2 个答案:

答案 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构造。