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