2012-01-04 51 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); 
相关问题