查询错误
传入ViewDataDictionary的模型项的类型为'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable ' 1[cta . web . area . nucleus . models]。,但是这个viewdataditionary实例需要一个类型为'CTA.Web.Areas.Nucleus.Models.UnitStatusUpdateDto'的模型项。
我应该得到一个结果,一个字符串说"New Item"
我不知道为什么会抛出错误。我明白了,它说我传递了两种不同的类型,但它们似乎是一样的。这可能是一些非常简单的东西,但我花了最后一个小时看SO和谷歌试图找出我做错了什么。控制器
[HttpGet]
public IActionResult UpdateStatus(long auctionId)
{
var model = (from w in _db.WorkFlowStatusType
join u in _db.UnitStatusHistory on w.WorkFlowStatusTypeId equals u.CurrentStatus
where u.AuctionId == auctionId
select new UnitStatusUpdateDto
{
CurrentStatusName = w.Name
});
return View(model);
}
模型public class UnitStatusUpdateDto
{
public string CurrentStatusName { get; set; }
}
视图
@model CTA.Web.Areas.Nucleus.Models.UnitStatusUpdateDto
<div class="col-8 bg-light ms-2">
<h3 class="text-primary my-3">Auction Info</h3>
<div class="row my-2">
<div class="row my-2">
<div class="col-6">Current Status</div>
<div class="col-6 input-group-sm">
@Model.CurrentStatusName
</div>
</div>
<div class="col-6">New Status</div>
<div class="col-6"style="padding-left: 0px;">
</div>
</div>
当前您的model
对象返回一个IQueryable
,要从查询转换到DTO类,您需要使用一个方法来填充它。比如你只需要一个对象:
return View(model.First());
或者如果您可能有null
结果:
return View(model.FirstOrDefault());
[HttpGet]
public async Task<IActionResult> UpdateStatus(long auctionId)
{
var model = await (from w in _db.WorkFlowStatusType
join u in _db.UnitStatusHistory on w.WorkFlowStatusTypeId equals u.CurrentStatus
where u.AuctionId == auctionId
select new UnitStatusUpdateDto
{
CurrentStatusName = w.Name
}).FirstorDefaultAsync();
return View(model);
}
考虑使用异步方法,以免阻塞UI线程