C# 包含来自多个数据库表的数据的单个表
在我的dotnet核心项目中,我有3个数据库表:Building、Checklist和answer 对于每栋建筑,我想根据清单和答案表创建一个包含信息的表格。我试着像下面的代码那样设置它,但它不起作用 我的viewModel:C# 包含来自多个数据库表的数据的单个表,c#,html,asp.net,linq,razor,C#,Html,Asp.net,Linq,Razor,在我的dotnet核心项目中,我有3个数据库表:Building、Checklist和answer 对于每栋建筑,我想根据清单和答案表创建一个包含信息的表格。我试着像下面的代码那样设置它,但它不起作用 我的viewModel: public class myViewModel { public int id { get; set; } public List<Answers> myAnswers { get; set; } public List<Bui
public class myViewModel
{
public int id { get; set; }
public List<Answers> myAnswers { get; set; }
public List<Building> myBuildings { get; set; }
public List<Check> myCheckpoints { get; set; }
}
我的看法是:
@model List<Server.myViewModel>
@foreach (var building in Model)
{
<h4>@Html.DisplayFor(modelItem => building.myBuildings.buildingName)</h4>
<table>
<thead>
<tr>
<th>Avviksbeskrivelse</th>
<th>Risiko</th>
<th>Dato registrert</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.myCheckpoints.Description)</td>
<td>@Html.DisplayFor(modelItem => item.myAnswers.Deviation)</td>
<td>@Html.DisplayFor(modelItem => item.myAnswers.Risk)</td>
</tr>
}
</tbody>
</table>
}
使用@foreach时,我会收到以下exeption消息:
System.InvalidOperationException:传递到
ViewDataDictionary的类型为“Server.myViewModel”,但此
ViewDataDictionary实例需要类型为的模型项
'System.Collections.Generic.IEnumerable'1[Server.myViewModel]'
我也无法从item.myAnswer转到item.myAnswer.Risk
是否有人知道我如何解决这些问题,或者有更好的方法解决这些问题?您应该将myViewModel列表传递给查看:
请加上解释,让他明白自己做错了什么谢谢,我想我忘了,但这并没有解决我的问题。我更新了问题,加入了使用@foreachThank时收到的错误消息,这很有效。您知道如何访问视图模型中列表表中的属性吗,如:@Html.DisplayFormodelItem=>building.myBuildings.buildingName?我不允许在myBuildingbuildingName是一个列表中选择属性,因此应该从此列表中选择一个元素,例如buildingName[0]>>>:@Html.DisplayFormodelItem=>building.MyBuildings.buildingName[0]我找不到buildingName。即使我的建筑模型包含buildingName,我也会收到一个错误,说列表中不包含buildingName的定义。。。
@model List<Server.myViewModel>
@foreach (var building in Model)
{
<h4>@Html.DisplayFor(modelItem => building.myBuildings.buildingName)</h4>
<table>
<thead>
<tr>
<th>Avviksbeskrivelse</th>
<th>Risiko</th>
<th>Dato registrert</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.myCheckpoints.Description)</td>
<td>@Html.DisplayFor(modelItem => item.myAnswers.Deviation)</td>
<td>@Html.DisplayFor(modelItem => item.myAnswers.Risk)</td>
</tr>
}
</tbody>
</table>
}
public IActionResult viewData()
{
var currentUser = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
var vm = new myViewModel();
vm.myBuildings = (from mb in db.buildings where mb.OwnerId == currentUser select mb).ToList();
vm.myAnswers = (from o in db.answers select o).ToList();
vm.myCheckpoints = (from mc in db.checks select mc).ToList();
var lstVm = new List<myViewModel>();
lstVm.Add(vm);
return View(lstVm);
}