如何将无关联单条数据的CompInfo表内容传递至ASP.NET Core视图?
解决ViewData传递CompInfo数据失败的问题
问题出在你查询Comp_Info的方式上:Where(m => m.Id == 1)返回的是IQueryableComp_Info.street会取不到有效数据。你需要先执行查询,获取到具体的CompInfo实体,再通过ViewData传递。
修正步骤:
1. 执行CompInfo查询,获取实体对象
因为你的CompInfo表仅存一条数据,用FirstOrDefaultAsync()或SingleOrDefaultAsync()执行查询,拿到实际的实体对象:
var compInfo = await _context.CompInfo.FirstOrDefaultAsync(m => m.Id == 1);
2. 通过ViewData传递数据
你可以选择传递单个属性,或者直接传递整个实体(后者更灵活,视图中可直接访问所有属性):
- 传递单个属性:
if (compInfo != null) { ViewData["CompanyName"] = compInfo.Name; ViewData["Street"] = compInfo.Street; ViewData["Phone"] = compInfo.Phone; // 按需添加其他需要传递的属性 } - 传递整个实体:
ViewData["CompInfo"] = compInfo;
3. 修改后的完整控制器代码
public async Task<IActionResult> Offer(int qry_offer) { ViewData["Message"] = "Offer"; // 查询并获取CompInfo实体 var compInfo = await _context.CompInfo.FirstOrDefaultAsync(m => m.Id == 1); if (compInfo != null) { // 方式1:传递单个属性(按需选择) ViewData["Street"] = compInfo.Street; ViewData["CompanyName"] = compInfo.Name; // 方式2:传递整个实体(二选一即可) // ViewData["CompInfo"] = compInfo; } // 原Offer查询逻辑保持不变 var x412Context = _context.Offer .Where(m => m.Id == qry_offer) .Include(o => o.Kunde) .Include(o => o.Mandant) .Include(m => m.OfferPos) .ThenInclude(m => m.Ust); return View(await x412Context.ToListAsync()); }
视图中访问数据的方式
- 如果传递的是单个属性:
<p>公司地址:@ViewData["Street"]</p> <p>公司名称:@ViewData["CompanyName"]</p> - 如果传递的是整个实体:
@{ var compInfo = ViewData["CompInfo"] as YourNamespace.CompInfo; } @if (compInfo != null) { <p>公司名称:@compInfo.Name</p> <p>公司地址:@compInfo.Street</p> <p>联系电话:@compInfo.Phone</p> }
注意替换YourNamespace为你的CompInfo实体所在的命名空间。
内容的提问来源于stack exchange,提问作者Paul_412
相关产品推荐
相关产品推荐

