Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法返回[HttpPost]方法的视图_Asp.net Mvc_View_Controller - Fatal编程技术网

Asp.net mvc 无法返回[HttpPost]方法的视图

Asp.net mvc 无法返回[HttpPost]方法的视图,asp.net-mvc,view,controller,Asp.net Mvc,View,Controller,返回视图时出现以下错误: Server Error in '/' Application. -------------------------------------------------------------------------------- The view 'student' or its master was not found. The following locations were searched: ~/Views/Student/student.aspx ~/View

返回视图时出现以下错误:

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>

大学生
学生姓名如下:

您的视图必须在
视图\学生\
中,除非您更改了视图引擎设置,我想您没有更改


因此,我相信您的视图不在那里。

您的视图必须在
视图\学生\
中-除非您更改了视图引擎设置,我想您没有更改


所以我相信你的观点不存在。

这里需要考虑的一些事情。

首先,在HTTP POST之后返回视图确实是一个糟糕的设计选择。你可以在谷歌上搜索PRG模式,你会发现很多文章解释了为什么你应该总是重定向到一个HTTP GET来呈现你的视图

其次,我觉得奇怪的是,您的代码正在寻找一个视图名“student”。根据MVC规范,控制器将查找名为action方法的视图,除非调用了接受视图名称作为参数的view()方法重载(这不是您的情况,至少在您发布的代码中不是这样)

在您的示例中,它似乎应该查找名为“SubmitStudent”的视图。同样,您在视图中声明的模型类型与要传递给它的模型不匹配。它接受一个
IEnumerable
,但您正在向它传递一个
IQueryable
(这就是您的学生变量所包含的内容)


我想你遗漏了代码的某些部分。你们发布的部分不太匹配。

这里要考虑的一些事情。

首先,在HTTP POST之后返回视图确实是一个糟糕的设计选择。你可以在谷歌上搜索PRG模式,你会发现很多文章解释了为什么你应该总是重定向到一个HTTP GET来呈现你的视图

其次,我觉得奇怪的是,您的代码正在寻找一个视图名“student”。根据MVC规范,控制器将查找名为action方法的视图,除非调用了接受视图名称作为参数的view()方法重载(这不是您的情况,至少在您发布的代码中不是这样)

在您的示例中,它似乎应该查找名为“SubmitStudent”的视图。同样,您在视图中声明的模型类型与要传递给它的模型不匹配。它接受一个
IEnumerable
,但您正在向它传递一个
IQueryable
(这就是您的学生变量所包含的内容)


我想你遗漏了代码的某些部分。您发布的部分彼此不太匹配。

为了使代码正常工作,您需要在
视图\Student\
视图\Shared\
文件夹中创建一个名为
SubmitStudent.aspx
的视图

视图继承字符串列表,而不是
Student
对象或查询返回的任何类型的对象,这看起来也很奇怪。您的视图需要一个可枚举的
字符串列表

这一行也令人困惑:

var student = student.studentTable.Where(s => s.studentId == model.Id);
你是说:

var student = model.studentTable.Where(s => s.studentId == model.Id);

为了使代码正常工作,您需要在
Views\Student\
Views\Shared\
文件夹中创建一个名为
SubmitStudent.aspx
的视图

视图继承字符串列表,而不是
Student
对象或查询返回的任何类型的对象,这看起来也很奇怪。您的视图需要一个可枚举的
字符串列表

这一行也令人困惑:

var student = student.studentTable.Where(s => s.studentId == model.Id);
你是说:

var student = model.studentTable.Where(s => s.studentId == model.Id);

你真的在向
/Student/SubmitStudent
发布一些东西吗。我想我们遗漏了什么。请提供您的提交按钮/链接信息。抱歉,这里是:评论:
在这里输入您的评论

@mootinator:是的,我们正在通过Submitar上的webformt文本区域向/Student/SubmitStudent发布内容。您是否真的向
/Student/SubmitStudent
发布了内容。我想我们遗漏了什么。请提供您的提交按钮/链接信息。抱歉,这里是:评论:
在这里输入您的评论

@mootinator:是的,我们正在通过submitOk上的webformt文本区域向/Student/SubmitStudent发布一些内容,我正在将视图重定向到[HttpGet]方法以呈现我的视图,如何将[HttpPost]方法SubmitStudent的参数显示到[HttpGet]方法DisplayStudent?这是一种好方法吗<代码>[HttpPost]公共操作结果提交学生(){StudentViewModel=TempData[“model”]作为StudentResponseViewModel;TempData[“id”]=model.id;TempData[“name”]=model.name;返回重定向到操作(“DisplayStudent”);}
[HttpGet]公共操作结果显示学生(){ViewData[“id”]=TempData[“id”];ViewData[“name”]=TempData[“name”];return View();}
View:
displaystustudent
注释中发布的代码几乎不可读。无论如何,MvcContrib项目中有一个有趣的actionfilter,它有助于PRG模式。它被称为“ModelStateToTempData”,如果出现验证错误,它基本上会在post操作期间将您的modelstate序列化到tempdata中,并在下一个GET方法中自动反序列化它。好的,我将视图重定向到[HttpGet]方法以呈现我的视图,如何显示[HttpPost]中的参数如何将学生提交给[HttpGet]方法DisplayStudent?这是一种很好的方法吗
[HttpPost]public ActionResult SubmitStudent(){StudentViewModel=TempData[“model”]作为StudentResponseViewModel;TempData[“id”]=model.id;TempData[“name”]=model.name;return RedirectToAction(“DisplayStudent”);}
[HttpGet]public ActionResult DisplayStudent(){ViewData[“id”]=Te