System.Web.HttpException / 将代码转换为合适的 MVC 架构

System.Web.HttpException / Converting code to proper MVC architecture

我的团队一直致力于为学校项目构建评论部分并以局部视图呈现它。

这是我想出的解决方案:

在索引页上:

@Html.Partial("StatusWall", new Project.Services.StatusServices())

状态墙:

@model Project.Services.StatusServices

@foreach (var status in Model.GetAllUserStatuses())
{...

StatusService 中的代码:

public List<UserStatus> GetAllUserStatuses()
    {
        //check
        var StatusResult = (from status in db.UserStatuses
                            orderby status.DateInserted descending
                            select status).ToList();
        return StatusResult;
    }

这可行,但问题是我们没有使用正确的 MVC 架构,因为我们绕过了控制器。由于我们项目的设计要求我使用分部视图,我一直不知道如何调用控制器,直到我的助手指出了 [ChildActionOnly] 属性

现在,我正在尝试将代码合并到 MVC 模型中,但到目前为止,我还没有找到解决方案。

这是我在控制器中编写的内容:

    [ChildActionOnly]
    public ActionResult StatusWall() {
        var service = new StatusServices();
        var result = service.GetAllUserStatuses();
        return PartialView(result);
    }

索引页:

@Html.Action("StatusWall")

所有其他代码不变。

抛出以下错误:

An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code

Additional information: Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.

任何人都可以向我解释我做错了什么吗?

我意识到哪里不对了。

我改变了...

@model Project.Services.StatusServices

@foreach (var status in Model.GetAllUserStatuses())
{...

...进入...

@model List<Project.Models.UserStatus>

@foreach (var status in Model)
{...

还有一些小的修复,比如将 ActionResult 变成 PartialViewResult,但我不知道这是否是代码工作所必需的。