2012-04-19 17 views
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變量轉換爲列表?

在此先感謝

+2

注意,'StudentsList.ToString()''== System.Collections.Generic.List \'1 [System.String]'。你期望什麼? – mellamokb 2012-04-19 16:55:54

+0

@mellamokb我期待學生的名字而不是類型。 – user793468 2012-04-19 22:20:06

+0

列表沒有自然輸出格式,因爲沒有「一種顯而易見的方式」來顯示列表的內容。你如何顯示列表內容的想法與下一個程序員不同。所以你必須自己定義它。 – mellamokb 2012-04-19 22:21:21

回答

2

你有什麼是名稱,而不是一個名稱的列表;如果你的模型只是一個字符串,引擎可以直接將它轉儲到頁面上,並稱它爲好。但它不知道如何處理一個列表,,因爲有許多方法來安排類似的東西。

它不知道你想要什麼:一個逗號分隔的列表?一串子彈點?一張桌子?引擎不知道,所以它放棄,並要求你的指示。

所以你需要告訴視圖如何顯示你的列表。你如何做到這一點取決於你,但我會給你一個例子。我比較熟悉的剃刀引擎,所以我會在這句法嘗試這樣的:

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

這應該生成學生姓名的項目符號列表。如果你想以不同的格式,只需使用div或者其他東西來代替ul/li結構。

4

使用下列內容:

string.Join(",",(List<string>)ViewData["StudentsList"])).ToArray());