错误:找不到视图或其主控形状.搜索了以下位置

本文关键字:搜索 位置 找不到 视图 错误 | 更新日期: 2023-09-27 18:19:31

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

以下是控制器操作:

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

控制器名称为"Student",视图位于"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"?

这是我的查看页面:

>"%>

显示学生学生名单如下:

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

错误:找不到视图或其主控形状.搜索了以下位置

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

return View((object)name);

相反。

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

return View("DisplayStudents", name);

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

发生这种情况是因为重载需要一个对象(如果它是数据)和一个字符串(如果您在.中传递视图的名称)

使用这个替代:

return View((object)name);