我遇到一个特定控制器操作没有显示视图的问题。
这是控制器动作:
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>
答案 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);