2011-07-13 86 views
1

我得到恢復視圖時出現以下錯誤:無法返回[HttpPost]方法的視圖

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

你居然發佈的內容以'/學生/ SubmitStudent' 。我們錯過了一些東西。 –

+0

請提供您的提交按鈕/鏈接信息。 –

+0

對不起,這裏是:




user793468

回答

1

您的視圖必須在"Views\Student\" - 除非您已更改視覺引擎設置,我想你沒有。

因此,我相信你的看法是不存在。

2

這裏有幾件事要考慮。

首先,一個HTTP POST之後返回一個視圖確實是一個不好的設計choiche。你可以谷歌關於PRG模式,你會發現許多文章,將解釋爲什麼你應該總是重定向到一個HTTP GET,這將呈現您的觀點。

其次,我覺得奇怪的是,你的代碼是尋找一個視圖名稱「學生」。根據MVC規範,控制器將查找名爲action方法的視圖,除非調用接受視圖名稱作爲參數的View()方法的重載(這不是您的情況,至少不會在您發佈的代碼中)。

在你的榜樣,現在看來似乎應該尋找一個名爲「SubmitStudent」視圖。同樣,您在視圖上聲明的模型類型與您傳遞給它的模型不匹配。它接受IEnumerable<string>,但你傳遞給它IQueryable<Student>(這是你的學生變量包含的)。

我想你忽略你的代碼的某些部分。你發佈的部分不完全匹配。

+0

好吧,我重定向視圖的[HTTPGET]方法來呈現我的看法,如何我是否將[HttpPost] mehod SubmitStudent中的參數顯示給[HttpGet]方法DisplayStudent? – user793468

+0

這是做這件事的好方法嗎? '[HttpPost] public ActionResult SubmitStudent() { StudentViewModel model = TempData [「model」] as StudentResponseViewModel; TempData [「id」] = model.Id; TempData [「name」] = model.Name; return RedirectToAction(「DisplayStudent」); }' '[HTTPGET] 公共的ActionResult DisplayStudent() { 計算機[ 「ID」] = TempData的[ 「ID」]; ViewData [「name」] = TempData [「name」]; return View(); }' – user793468

+0

檢視: '<%@頁面語言= 「C#」 繼承= 「System.Web.Mvc.ViewPage」 %> <頭RUNAT = 「服務器」> DisplayStudent

<%= ViewData["id"]%>
<%= ViewData["name"]%>
' – user793468

1

爲了讓您的代碼正常工作,您需要在Views\Student\Views\Shared\文件夾內部有一個名爲SubmitStudent.aspx的視圖。

它還看起來很奇怪,你的看法繼承字符串列表,而不是一個Student對象或任何類型的對象的查詢返回。您的觀點是希望string

此行的一個枚舉列表也令人困惑:

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

你的意思是:

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