【问题标题】:Single table with data from multiple database tables包含来自多个数据库表的数据的单个表
【发布时间】:2017-05-13 09:33:15
【问题描述】:

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

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

我的视图模型:

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

我的控制器如下所示:

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

        return View(vm);
    }

我的看法:

@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 时,我收到以下异常消息:

System.InvalidOperationException:模型项传入 ViewDataDictionary 的类型为“Server.myViewModel”,但这 ViewDataDictionary 实例需要类型为模型项 'System.Collections.Generic.IEnumerable`1[Server.myViewModel]'。

我也无法从 item.myAnswer 转到 item.myAnswer.Risk。

有谁知道我可以如何解决这些问题,或者有更好的方法吗?

【问题讨论】:

    标签: c# html asp.net linq razor


    【解决方案1】:

    您应该将 myViewModelList 传递给查看:

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

    【讨论】:

    • 请补充解释,让他明白自己做错了什么
    • 谢谢,我想我忘了那个,但它并没有解决我的问题。我更新了问题以包含使用@foreach 时收到的错误消息
    • 谢谢,成功了。你知道我如何在我的视图模型中访问列表中的属性,如下所示:@Html.DisplayFor(modelItem =&gt; building.myBuldings.buildingName?我不允许选择 myBuilding 中的属性
    • buildingName 是一个列表,因此应从该列表中选择一个元素,例如 buildingName[0] >>> :@Html.DisplayFor(modelItem => building.myBuldings.buildingName[0])
    • 我找不到 buildingName。即使我的 Building 模型包含 buildingName,我也会收到一条错误消息,提示“List 不包含 buildingName 的定义...”
    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多