将Linq查询结果从控制器传递给View,并获得错误(问题中的错误)



查询错误

传入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线程

相关内容

  • 没有找到相关文章

最新更新