C# InvalidOperationException:列表,但应为vm值

C# InvalidOperationException:列表,但应为vm值,c#,C#,错误消息: 处理请求时发生未处理的异常。 InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“System.Collections.Generic.List`1[Howest.Grade.Web.ViewModels.ProjectsDetailVm]”,但此ViewDataDictionary实例需要类型为“Howest.Grade.Web.ViewModels.ProjectsDetailVm”的模型项 控制器 using Howe

错误消息:

处理请求时发生未处理的异常。 InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“System.Collections.Generic.List`1[Howest.Grade.Web.ViewModels.ProjectsDetailVm]”,但此ViewDataDictionary实例需要类型为“Howest.Grade.Web.ViewModels.ProjectsDetailVm”的模型项

控制器

using Howest.Grade.Web.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace Howest.Grade.Web.Controllers
{
    public class ProjectsController : Controller
    {
        private GradeContext _gradeContext;

        public ProjectsController(GradeContext gradeContext)
        {
            _gradeContext = gradeContext;
        }
        public IActionResult Index()
        {
            return View();
        }

        [Route("Detail/{ProjectId?}")]
        public IActionResult Detail(Guid? ProjectId)
        {

            if (ProjectId == null)
            {
                return NotFound("ProjectId not found");
            }

            var projectsDetailVm = _gradeContext.Projects
                .Where(m => m.Id == ProjectId)
                .Select(project => new ProjectsDetailVm
                {
                    ProjectId = project.Id,
                    Name = project.Name,
                    CreationDate = project.CreationDate,
                    CreatedByUserId = project.CreatedByUserId,
                    Description = project.Description,
                    CompanyId = project.Company.Id,
                    CompanyName = project.Company.Name,
                    DeletionDate = project.DeletionDate,
                    DeletedByUserId = project.DeletedByUserId,
                    UpdateDate = project.UpdateDate,
                    UpdatedByUserId = project.UpdatedByUserId,
                    IsDeleted = project.IsDeleted
                }).ToList();

            if(projectsDetailVm == null)
            {
                return NotFound("Project not found");
            }

            return View(projectsDetailVm);
        }
    }
}
视图模型:

using CoreLibrary.Lib;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace Howest.Grade.Web.ViewModels
{
    public class ProjectsDetailVm
    {
        public Guid ProjectId { get; set; }
        public string Name { get; set; }
        public DateTime CreationDate { get; set; }
        public Guid? CreatedByUserId { get; set; }
        public string Description { get; set; }
        public Guid CompanyId { get; set; }
        public string CompanyName { get; set; }
        public DateTime? DeletionDate { get; set; }
        public Guid? DeletedByUserId { get; set; }
        public DateTime? UpdateDate { get; set; }
        public Guid? UpdatedByUserId { get; set; }
        public bool IsDeleted { get; set; }
        public Guid? ApplicationUserId { get; set; }
        public Guid? ProjectStatusId { get; set; }
    }
}

@模型Howest.Grade.Web.ViewModels.ProjectsDetailVm
@{
ViewData[“标题”]=“详细信息”;
}
帕吉纳酒店
项目:@Html.DisplayFor(Model=>Model.Name)

努默项目: @DisplayFor(model=>model.ProjectId) 贝什里金 @DisplayFor(model=>model.Description) 贝德里杰夫斯纳姆 @DisplayFor(model=>model.CompanyName) 安马克基准面 @DisplayFor(model=>model.CreationDate) Gebruiker dat het项目aangemaakt heeft @DisplayFor(model=>model.CreatedByUserId) 范维德伦基准酒店 @DisplayFor(model=>model.DeletionDate) Gebruiker dat het项目verwijderd heeft @DisplayFor(model=>model.DeletedByUserId) 基准面包车更新 @DisplayFor(model=>model.UpdateDate) Gebruiker dat het项目GEHEEFT @DisplayFor(model=>model.UpdatedByUserId) 他是维杰德吗? @DisplayFor(model=>model.IsDeleted) 安帕森| 特鲁格
查看您的
cshtml
视图可能会有所帮助,但根据我的经验,此错误通常是由控制器返回的类型与视图中的
@model
不匹配引起的。因此,在您看来,您可能有:

@model ProjectsDetailVm

但它应该是:

@model IEnumerable

更新

如果只需要一个
ProjectsDetailVm
,则应向LINQ查询中添加一个
.SingleOrDefault()
,以确保只返回一个对象:

var projectsDetailVm=\u gradeContext.Projects
.Where(m=>m.Id==projectd)
.选择(项目=>new ProjectsDetailVm
{
ProjectId=project.Id,
Name=project.Name,
CreationDate=project.CreationDate,
CreatedByUserId=project.CreatedByUserId,
Description=project.Description,
CompanyId=project.Company.Id,
CompanyName=project.Company.Name,
DeletionDate=project.DeletionDate,
DeletedByUserId=project.DeletedByUserId,
UpdateDate=project.UpdateDate,
UpdatedByUserId=project.UpdatedByUserId,
IsDeleted=project.IsDeleted
}).SingleOrDefault();
目前,您的
if(projectsDetailVm==null)
永远不会是
true
,因为如果没有行,那么
projectsDetailVm
将是一个空集合,而不是
null
。我假设您只需要一个
ProjectsDetailVm
,因为
其中(m=>m.Id==projectd)


    @model Howest.Grade.Web.ViewModels.ProjectsDetailVm

    @{
        ViewData["Title"] = "Detail";
    }

    <h1>Detailpagina</h1>


    <h4>Project: @Html.DisplayFor(Model => Model.Name)</h4>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            Project nummer:
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.ProjectId)
        </dd>
        <dt class="col-sm-2">
            Beschrijving
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Description)
        </dd>
        <dt class="col-sm-2">
            Bedrijfsnaam
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.CompanyName)
        </dd>
        <dt class="col-sm-2">
            Aanmaak datum
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.CreationDate)
        </dd>
        <dt class="col-sm-2">
            Gebruiker dat het project aangemaakt heeft
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.CreatedByUserId)
        </dd>
        <dt class="col-sm-2">
            Datum van verwijderen
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.DeletionDate)
        </dd>
        <dt class="col-sm-2">
            Gebruiker dat het project verwijderd heeft
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.DeletedByUserId)
        </dd>
        <dt class="col-sm-2">
            Datum van update
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.UpdateDate)
        </dd>
        <dt class="col-sm-2">
            Gebruiker dat het project geupdated heeft
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.UpdatedByUserId)
        </dd>
        <dt class="col-sm-2">
            Is het verwijderd?
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.IsDeleted)
        </dd>
    </dl>
    </div>
    <div>
        <a asp-action="Edit" asp-route-id="@Model.ProjectId">Aanpassen</a> |
        <a asp-action="Index">Terug</a>
    </div>