返回视图时出现以下错误:
Server Error in '/' Application.
--------------------------------------------------------------------------------
The view 'student' or its master was not found. The following locations were searched:
~/Views/Student/student.aspx
~/Views/Student/student.ascx
~/Views/Shared/student.aspx
~/Views/Shared/student.ascx
这是我的控制器动作:
[HttpPost]
public ActionResult SubmitStudent()
{
StudentViewModel model = TempData["model"] as StudentResponseViewModel;
ViewData["id"] = model.Id;
ViewData["name"] = model.Name;
string comment = Request["comment"];
var student = student.studentTable.Where(s => s.studentId == model.Id);
return View(student);
}
这是我的观点:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<string>>" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Student</title>
</head>
<body>
<div>
Student name listed below:
</div>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item)%>
</td>
</tr>
<% } %>
</table>
</body>
</html>
答案 0 :(得分:2)
这里要考虑的一些事情。
首先,在HTTP POST之后返回视图实际上是一个糟糕的设计选择。你可以谷歌关于PRG模式,你会发现很多文章,可以解释为什么你应该总是重定向到HTTP GET,它将呈现你的视图。
其次,我发现您的代码正在寻找视图名称“student”。根据MVC规范,控制器将查找一个名为action方法的视图,除非调用接受视图名称作为参数的View()方法的重载(这不是你的情况,至少在你发布的代码中没有) )。
在您的示例中,似乎应该查找名为“SubmitStudent”的视图。同样,您在视图中声明的模型类型与您传递给它的模型不匹配。它接受IEnumerable<string>
,但您传递给IQueryable<Student>
(这是您的学生变量包含的内容)。
我认为您省略了代码的某些部分。您发布的部分彼此不完全匹配。
答案 1 :(得分:1)
您的观点必须在"Views\Student\"
- 除非您更改了我认为您没有的视图引擎设置。
所以我相信你的观点不存在。
答案 2 :(得分:1)
为了让您的代码正常工作,您需要在SubmitStudent.aspx
或Views\Student\
个文件夹中使用名为Views\Shared\
的视图。
您的视图继承了字符串列表而不是Student
对象或查询返回的任何类型的对象,这看起来很奇怪。您的视图需要一个string
的可列举列表
这一行也令人困惑:
var student = student.studentTable.Where(s => s.studentId == model.Id);
你的意思是:
var student = model.studentTable.Where(s => s.studentId == model.Id);