0

我的团队一直在为一个学校项目构建评论部分,并将其呈现为局部视图。

这是我想出的解决方案:

在索引页面上:

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

状态墙:

@model Project.Services.StatusServices

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

状态服务中的代码:

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")

所有其他代码均未更改。

这会抛出以下错误:

System.Web.dll 中出现“System.Web.HttpException”类型的异常,但未在用户代码中处理

附加信息:执行处理程序“System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper”的子请求时出错。

谁能向我解释我做错了什么?

4

1 回答 1

2

我意识到出了什么问题。

我变了...

@model Project.Services.StatusServices

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

...进入...

@model List<Project.Models.UserStatus>

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

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

于 2015-05-11T15:57:04.460 回答