【问题标题】:Error: The view or its master was not found. The following locations were searched错误:未找到视图或其主视图。搜索了以下位置
【发布时间】:2012-01-04 20:20:00
【问题描述】:

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

这是控制器动作:

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>

【问题讨论】:

  • 如果你在控制器中设置了一个断点,你是在打你期待的动作吗?
  • 你能显示你的路线,以及被请求的网址吗?这看起来像一个路由问题。

标签: c# html asp.net-mvc


【解决方案1】:

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

return View((object)name);

改为。

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

return View("DisplayStudents", name);

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

【讨论】:

    【解决方案2】:

    发生这种情况是因为重载需要一个对象,如果它是数据,如果你传入视图的名称,则需要一个字符串。

    改用这个:

    return View((object)name);
    

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 1970-01-01
      • 2012-04-29
      • 2013-08-18
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      相关资源
      最近更新 更多