Asp.net core 呈现部分视图:模型不匹配和DataViewDictionary问题(Razor页面/ASP.NET核心)

Asp.net core 呈现部分视图:模型不匹配和DataViewDictionary问题(Razor页面/ASP.NET核心),asp.net-core,partial-views,razor-pages,Asp.net Core,Partial Views,Razor Pages,业余程序员回来了,为你们这些了不起的人提一些更愚蠢的问题。请原谅我的无知,当你审查我的代码,它可能没有你的一些专业人士希望它是干净的 我正在尽我最大的努力在Pluralsight网页上学习Scott Allen先生精彩的ASP.Net核心教程。我曾经成功地经历过一次,现在我又经历了一次,同时将它改编为我一直想要构建的应用程序。我被课程的一部分(module6,video6)卡住了,其中一个razor页面列出了基本HTML表上的一些SQL数据,它被更改为将每个DB记录作为部分视图列出。为了做到这一

业余程序员回来了,为你们这些了不起的人提一些更愚蠢的问题。请原谅我的无知,当你审查我的代码,它可能没有你的一些专业人士希望它是干净的

我正在尽我最大的努力在Pluralsight网页上学习Scott Allen先生精彩的ASP.Net核心教程。我曾经成功地经历过一次,现在我又经历了一次,同时将它改编为我一直想要构建的应用程序。我被课程的一部分(module6,video6)卡住了,其中一个razor页面列出了基本HTML表上的一些SQL数据,它被更改为将每个DB记录作为部分视图列出。为了做到这一点,在FOREACH循环中使用HTML标记帮助器,并将部分布局名称和模型作为参数传递。在每次迭代中,它在主视图中的自己的局部视图上呈现每个单独的DB记录。我在执行应用程序时遇到的问题是,当加载主页面并到达foreach循环时,在第一次迭代时,它崩溃并给我一个“未处理的异常”错误。我已经在下面尽了最大努力,包含了你们需要分析的所有代码片段,但如果缺少什么,请原谅我的无知。如果有,请告诉我,我会马上把它包括进去

主视图列表。cshtml:

@page
@model ListModel
@{
    ViewData["Title"] = "Containers";
}
<h1>Containers</h1>
<form method="get">
    <div class="form-group">
        <div class="input-group">
            <input type="search" class="form-control"
                   asp-for="SearchTerm" />
            <span class="input-group-btn">
                <button class="btn btn-default">
                    <i class="glyphicon glyphicon-search"></i>
                </button>
            </span>
        </div>
    </div>
</form>
@foreach (var container in Model.Containers)
    {
        <partial name="_Summary" @model="container"/>
    }
<a asp-page="./Edit" class="btn btn-primary"> Add New</a>
@section footer {
    <div>@Model.Message</div>
}
@using FreightPush.Core
@model Container
<div class="card">
    <div class="panel-heading">
        <h3>Container Number: @Model.Number</h3>
    </div>
    <div class="card-body">
        <span>Container Type: @Model.ContainerType</span>
        <span>Client: @Model.Client</span>
    </div>
    <div class="card-footer">
        <a class="btn btn-lg"
           asp-page="./Detail"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-search-plus"></i>
        </a>
        <a class="btn btn-lg"
           asp-page="./Edit"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-edit"></i>
        </a>
        <a class="btn btn-lg"
           asp-page="./Delete"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-trash"></i>
        </a>
    </div>
</div>
@page
@模型列表模型
@{
ViewData[“标题”]=“容器”;
}
容器
@foreach(Model.Containers中的var容器)
{
}
新增
@节尾{
@模型消息
}
MAINVIEW List.cshtml.cs

namespace FreightPush.Pages.Containers
{
    public class ListModel : PageModel
    {
        private readonly IConfiguration config;
        private readonly IContainerData containerData;
        public string Message { get; set; }
        public IEnumerable<Container> Containers { get; set; }
        [BindProperty(SupportsGet = true)]
        public string SearchTerm { get; set; }
        public ListModel(IConfiguration config, IContainerData containerData)
        {
            this.config = config;
            this.containerData = containerData;
        }
        public void OnGet()
        {
            Message = config["Message"];
            Containers = containerData.GetContainersByNumber(SearchTerm);
        }
    }
}
名称空间FreightPush.Pages.Containers
{
公共类ListModel:PageModel
{
私有只读IConfiguration配置;
专用只读IContainerData容器数据;
公共字符串消息{get;set;}
公共IEnumerable容器{get;set;}
[BindProperty(SupportsGet=true)]
公共字符串搜索项{get;set;}
公共列表模型(IConfiguration配置,IContainerData容器数据)
{
this.config=config;
this.containerData=containerData;
}
公共互联网
{
Message=config[“Message”];
Containers=containerData.GetContainerByNumber(搜索术语);
}
}
}
PARTIALVIEW-\u Summary.cshtml:

@page
@model ListModel
@{
    ViewData["Title"] = "Containers";
}
<h1>Containers</h1>
<form method="get">
    <div class="form-group">
        <div class="input-group">
            <input type="search" class="form-control"
                   asp-for="SearchTerm" />
            <span class="input-group-btn">
                <button class="btn btn-default">
                    <i class="glyphicon glyphicon-search"></i>
                </button>
            </span>
        </div>
    </div>
</form>
@foreach (var container in Model.Containers)
    {
        <partial name="_Summary" @model="container"/>
    }
<a asp-page="./Edit" class="btn btn-primary"> Add New</a>
@section footer {
    <div>@Model.Message</div>
}
@using FreightPush.Core
@model Container
<div class="card">
    <div class="panel-heading">
        <h3>Container Number: @Model.Number</h3>
    </div>
    <div class="card-body">
        <span>Container Type: @Model.ContainerType</span>
        <span>Client: @Model.Client</span>
    </div>
    <div class="card-footer">
        <a class="btn btn-lg"
           asp-page="./Detail"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-search-plus"></i>
        </a>
        <a class="btn btn-lg"
           asp-page="./Edit"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-edit"></i>
        </a>
        <a class="btn btn-lg"
           asp-page="./Delete"
           asp-route-containerId="@Model.Id">
            <i class="fa fa-trash"></i>
        </a>
    </div>
</div>
@使用FreightPush.Core
@模型容器
集装箱编号:@Model.Number
容器类型:@Model.ContainerType
客户:@Model.Client
我在list.cshtml中FOREACH循环的第一个iter上遇到的错误:

InvalidOperationException:传递到ViewDataDictionary的模型项的类型为 “FreightPush.Pages.Containers.ListModel”,但此ViewDataDictionary 实例需要类型为“FreightPush.Core.Container”的模型项

以下是我根据一些非常广泛的互联网研究得出的结论:

  • 我可以确认我没有在我的布局上建立模型 页面
  • 我知道容器是一个IENumerable,我的摘要页面的模型是一个容器,我在在线论坛上看到一些人指出这是最常见的错误。然而,这不是foreach循环及其声明的变量容器的目的吗?在我的交互式调试器上,容器工作正常,所有相关字段都从我的SQL DB填充
  • 如果我已经正确地理解了我所研究的内容,那么从这里我收集到的真正的罪魁祸首是viewdatadictionary在视图之间共享。但是,我在互联网上找不到任何地方可以向我展示将视图数据作为参数传递的正确语法,intellisense对此没有帮助。甚至可以用视图数据参数来解决问题吗
    非常感谢你们的帮助!这个网站一次一个业余工程师,让世界变得更美好

    当我只将其更改为
    而不更改
    @
    时,它工作得很好。谢谢你。我已经盯着这个代码看了两天了,我不敢相信我没有看到那个打字错误。这正是问题所在,先生,您是位绅士和学者。在这个线程中添加一些对未来与该主题相关的谷歌搜索有用的东西:1)当你获得tunnel vision时,你会错过愚蠢的错误2)html标记帮助器在传递模型时没有任何问题,一旦错误表明问题出在模型上,那行代码的语法应该是我明显的怀疑。再次感谢邢