错误:未找到视图或其主控。搜索了以下位置

时间:2012-01-04 20:20:00

标签: c# html asp.net-mvc

我遇到一个特定控制器操作没有显示视图的问题。

这是控制器动作:

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);
        }

控制器名称为“学生”,视图显示在“Views / Student / 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              学生名单如下:       

<table>

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

<% } %>

</table> </body> </html>

2 个答案:

答案 0 :(得分:5)

因为您的View(name);来电正在调用重载View(string viewName)。如果要将字符串作为模型传递,请尝试使用

return View((object)name);

代替。

如果这不起作用,请尝试使用重载View(string viewName, object model)显式指定viewName,如下所示:

return View("DisplayStudents", name);

UPD :查看您的观看代码,我可以说它不会返回预期页面:您从控制器返回单个字符串项作为模型,但是你的DisplayStudents.aspx期待一个集合。您还应该更正视图(因此它将接受单个字符串作为模型)或从控制器返回IEnumerable<string> - 从.First()的LINQ表达式中删除name

答案 1 :(得分:3)

这是因为如果对象是数据,则重载需要一个对象;如果要传递视图的名称,则需要一个字符串。

请改用:

return View((object)name);