You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC ViewModel传递到View时类型不匹配及属性找不到问题

问题原因

两个报错本质都是控制器传递的模型类型和视图声明的模型类型不匹配导致的:

  • 你查询的是指定id的单条审批请求,控制器却返回了List<ReportViewModel>集合类型
  • 视图虽然声明了接收IEnumerable<ReportViewModel>集合,却直接按单个ReportViewModel对象调用属性,自然找不到对应属性
解决步骤

1. 修改控制器代码

你根据固定id查询AppRequest,结果只会有一条,不需要返回集合:
把查询语句最后的.ToList()改为.FirstOrDefault(),直接返回单个ReportViewModel对象即可,修改后代码如下:

public ActionResult Index(int id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    AppRequest appRequest = db.AppRequest.Find(id);
    if (appRequest == null)
    {
        return HttpNotFound();
    }
    if (appRequest.General.Count != 0)
    {
        var ReqDetails = (from a in db.AppRequest
                          join e in db.CreateEmployee on a.Req_By equals e.Id
                          join c in db.CreateCompany on e.CompanyId equals c.Id
                          join d in db.CreateDesignation on e.DesignId equals d.Id
                          join dep in db.CreateDepartment on e.DepId equals dep.Id
                          where a.Id == id
                          select new ReportViewModel
                          {
                              RequestedDate = a.Req_Date.ToString(),
                              RequestBy = e.EmpName,
                              CompanyName = c.CompanyName,
                              RequestByDessignation = d.Designation,
                              RequestByDepartment = dep.Department,
                              GeneralItemsApprovedList= (from a in db.AppRequest
                                                         join g in db.General on a.Id equals g.Req_Id
                                                         join gi in db.GeneralItms on g.Id equals gi.General_Id
                                                         where a.Id == id
                                                         select new GeneralItemsApprovedList
                                                         {
                                                             Attachment = gi.Attachment,
                                                             ItemDescription = gi.Attachment_Description,
                                                             ItemPrice = gi.Attachment_Amount.ToString()
                                                         }).ToList(),
                              ApprovalList = (from a in db.AppRequest
                                              join ap in db.ApprovalProcess on a.Id equals ap.Req_Id
                                              join pa in db.ApproveParties on ap.Id equals pa.ApprovalProcess_Id
                                              join ae in db.CreateEmployee on pa.Approver_Id equals ae.Id
                                              join ad in db.CreateDesignation on ae.DesignId equals ad.Id
                                              where a.Id == id
                                              select new ApprovalList
                                              {
                                                  ApproveDate = pa.Approved_Date.ToString(),
                                                  ApprovedBy = ae.EmpName,
                                                  ApprovedByDessignation = ad.Designation,
                                              }).ToList()
                          }).FirstOrDefault(); // 此处将ToList改为FirstOrDefault
        if (ReqDetails == null)
        {
            return HttpNotFound();
        }
        return View("ApprovedReport", ReqDetails);
    }
    return View("");
}

2. 修改视图声明的模型类型

把视图顶部的模型声明从集合类型改为单个ReportViewModel类型:

@model Asp_PASMVC.ViewModels.ReportViewModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

3. 调整视图属性调用

修改后视图的Model就是单个ReportViewModel对象,原来的@Html.DisplayFor(model => model.RequestBy)和@foreach (var item in Model.ApprovalList)的写法都可以正常运行,不需要额外修改。

内容的提问来源于stack exchange,提问作者smc develpments

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:39:01