[英]Passing Linq query result to View from controller and Getting Error (error in the question)
獲取錯誤
傳遞到 ViewDataDictionary 的 model 項的類型為“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable”1[CTA.Web.Areas.Nucleus.Models.UnitStatusUpdateDto]',但此 ViewDataDictionary 實例需要類型為“CTA”的 model 項。 Web.Areas.Nucleus.Models.UnitStatusUpdateDto'。
我應該得到一個結果,一個字符串說“新項目”。
我不知道為什么會拋出錯誤。 我明白了,它說我傳遞了兩種不同的類型,但它們似乎做的是一樣的。 這可能是非常簡單的事情,但我花了最后一個小時查看 SO 和谷歌,試圖找出我做錯了什么。 Controller
[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);
}
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
對象正在返回一個IQuerable
,要從您需要使用將填充它的方法的查詢轉換為 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 線程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.