Asp.net core 呈现部分视图:模型不匹配和DataViewDictionary问题(Razor页面/ASP.NET核心)
业余程序员回来了,为你们这些了不起的人提一些更愚蠢的问题。请原谅我的无知,当你审查我的代码,它可能没有你的一些专业人士希望它是干净的 我正在尽我最大的努力在Pluralsight网页上学习Scott Allen先生精彩的ASP.Net核心教程。我曾经成功地经历过一次,现在我又经历了一次,同时将它改编为我一直想要构建的应用程序。我被课程的一部分(module6,video6)卡住了,其中一个razor页面列出了基本HTML表上的一些SQL数据,它被更改为将每个DB记录作为部分视图列出。为了做到这一点,在FOREACH循环中使用HTML标记帮助器,并将部分布局名称和模型作为参数传递。在每次迭代中,它在主视图中的自己的局部视图上呈现每个单独的DB记录。我在执行应用程序时遇到的问题是,当加载主页面并到达foreach循环时,在第一次迭代时,它崩溃并给我一个“未处理的异常”错误。我已经在下面尽了最大努力,包含了你们需要分析的所有代码片段,但如果缺少什么,请原谅我的无知。如果有,请告诉我,我会马上把它包括进去 主视图列表。cshtml: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记录作为部分视图列出。为了做到这一
@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”的模型项
以下是我根据一些非常广泛的互联网研究得出的结论:
非常感谢你们的帮助!这个网站一次一个业余工程师,让世界变得更美好 当我只将其更改为
而不更改@
时,它工作得很好。谢谢你。我已经盯着这个代码看了两天了,我不敢相信我没有看到那个打字错误。这正是问题所在,先生,您是位绅士和学者。在这个线程中添加一些对未来与该主题相关的谷歌搜索有用的东西:1)当你获得tunnel vision时,你会错过愚蠢的错误2)html标记帮助器在传递模型时没有任何问题,一旦错误表明问题出在模型上,那行代码的语法应该是我明显的怀疑。再次感谢邢