Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含来自多个数据库表的数据的单个表_C#_Html_Asp.net_Linq_Razor - Fatal编程技术网

C# 包含来自多个数据库表的数据的单个表

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

在我的dotnet核心项目中,我有3个数据库表:Building、Checklist和answer

对于每栋建筑,我想根据清单和答案表创建一个包含信息的表格。我试着像下面的代码那样设置它,但它不起作用

我的viewModel:

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);
}