2012-01-04 52 views
2

我有一個特定的控制器操作不顯示視圖的問題。錯誤:未找到視圖或其主人。以下位置被搜索

這裏是控制器動作:

public ActionResult DisplayStudents(string id) 
     { 
      var name = (from p in data.StudentTable.Where(a => a.ClassNumberID == id) 
            group n by n.StudentName into g 
            select g.Key).First(); 

      return View(name); 
     } 

控制器名稱是「學生」,並認爲在「查看/學生/ DisplayStudents.aspx」

存在爲什麼我仍然得到這個錯誤:

Server Error in '/' Application. 
-------------------------------------------------------------------------------- 

The view 'Thomas Guenn' or its master was not found. The following locations were searched: 
~/Views/Student/Thomas Guenn.aspx 
~/Views/Student/Thomas Guenn.ascx 
~/Views/Shared/Thomas Guenn.aspx 
~/Views/Shared/Thomas Guenn.ascx 

此外,爲什麼它尋找「Thomas Guenn.aspx」而不是「DisplayStudents.aspx」?

這是我的看法頁:

>" %>

DisplayStudents Students are listed below:

<table> 

<% foreach (var item in Model) { %> 
    <tr> 
     <td> 
      <%= Html.Encode(item)%> 
     </td> 
    </tr> 

<% } %> 

</table> </body> </html> 
+0

如果你把一個破發點在控制器中,你是否正在觸及你期待的動作? – 2012-01-04 20:23:20

+0

你可以顯示你的路線和正在請求的網址嗎?這看起來像一個路由問題。 – rejj 2012-01-04 20:23:31

回答

5

因爲你View(name);呼叫呼叫超載View(string viewName)。如果你想傳遞字符串作爲模型,然後嘗試使用

return View((object)name); 

改爲。

如果這不起作用,嘗試明確指定的viewName,使用過載View(string viewName, object model)這樣的:

return View("DisplayStudents", name); 

UPD:看你的視圖代碼,我可以說,它不會返回預期頁面:您將單個字符串項目作爲控制器的模型返回,但您的DisplayStudents.aspx需要一個集合。您還應該更正視圖(因此它將接受單個字符串作爲模型)或從控制器返回IEnumerable<string> - 通過從LINQ表達式中刪除.First()name

3

這是因爲超載預計,如果它是數據的對象,如果你傳入視圖的名稱的字符串

用這個代替:

return View((object)name); 
相關問題