Не удалось вернуть представление для метода [HttpPost] - PullRequest
1 голос
/ 13 июля 2011

Я получаю следующую ошибку при возврате представления:

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>

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Несколько вещей, которые следует рассмотреть здесь.

Прежде всего, возвращение представления после HTTP POST - действительно плохой выбор дизайна. Вы можете зайти в Google по поводу шаблона PRG и найти множество статей, в которых объясняется, почему вы всегда должны перенаправлять на HTTP GET, который будет отображать ваше представление.

Во-вторых, я нахожу странным, что ваш код ищет представление с именем "student". Согласно спецификации MVC, контроллер будет искать представление, названное в качестве метода действия, если не вызывается перегрузка метода View (), который принимает имя представления в качестве параметра (это не ваш случай, по крайней мере, не в опубликованном вами коде). ).

В вашем примере кажется, что он должен искать представление с именем "SubmitStudent". Опять же, тип модели, который вы объявляете в своем представлении, не соответствует модели, которую вы ему передаете. Он принимает IEnumerable<string>, но вы передаете ему IQueryable<Student> (это то, что содержит переменная вашего студента).

Я думаю, что вы пропустили некоторые части вашего кода. Части, которые вы разместили, не совсем совпадают.

1 голос
/ 13 июля 2011

Чтобы ваш код работал, вам понадобится представление под названием 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);
1 голос
/ 13 июля 2011

Ваше представление должно быть в "Views\Student\" - если вы не изменили настройки двигателя представления, которые, я полагаю, у вас нет.

Так что я верю, что твоего мнения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...