我的团队一直致力于为学校项目构建评论部分,并在局部视图中进行渲染。
这是我提出的解决方案:
在索引页面上:
@Html.Partial("StatusWall", new Project.Services.StatusServices())
StatusWall:
@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模型中,但到目前为止,解决方案还没有找到我。
这是我在Controller中写的内容:
[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'的子请求时出错。
任何人都可以向我解释我做错了吗?
答案 0 :(得分:2)
我意识到出了什么问题。
我改变了......
@model Project.Services.StatusServices
@foreach (var status in Model.GetAllUserStatuses())
{...
... INTO ...
@model List<Project.Models.UserStatus>
@foreach (var status in Model)
{...
还有一些小修复,比如将ActionResult转换为PartialViewResult,但我不知道代码是否有必要这样做。