我正在尝试将一些数据传递到我的布局中,但是无法使其正常工作。我以前已经成功完成了此操作,但是这次,无论我在尝试什么,它都行不通。
我收到此错误:
InvalidOperationException:传递到ViewDataDictionary中的模型项的类型为“ System.Collections.Generic.List`1 [DOOR.Core.Web.Models.DataTaxonomy.Object]”,但是此ViewDataDictionary实例需要该类型的模型项“ DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel”。
过去有人处理过类似的事情吗?
我的Default.cshtml:
@model DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "~/Pages/DataTaxonomyTool/Layout/LayoutTaxonomy.cshtml";
}
@for (char c = 'A'; c <= 'Z'; c++)
{
<ul style="list-style:none">
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" data-target="#@c.ToString().ToLower()">@c</a>
<div id="@c.ToString().ToLower()" class="collapse">
@foreach (var item in Model.Object.OrderBy(x => x.ObjectName))
{
@if (item.ObjectName.StartsWith(c.ToString().ToLower()))
{
<ul style="list-style:none">
<li>@item.ObjectName</li>
</ul>
}
}
</div>
</li>
</ul>
}
我的ViewComponent类:
public class LayoutListsViewComponent : ViewComponent
{
DOOR.Core.Web.Models.ReportContext _context;
public LayoutListsViewComponent(DOOR.Core.Web.Models.ReportContext context)
{
_context = context;
}
public IList<Object> objects { get; set; }
public async Task<IViewComponentResult> InvokeAsync()
{
var objects = await _context.objects.ToListAsync();
return View(objects);
}
}
“我的布局”页面:
addTagHelper*,DOOR.Core.Web
<!DOCTYPE html>
<html>
...
<vc:layout-lists></vc:layout-lists>
...
答案 0 :(得分:1)
当您使用不同的视图强烈键入视图时,您将返回不同的对象以进行查看。显然您似乎忘记了发送返回的IndexModel
属性已填充的Object
。
由于您的视图具有@model DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel
,而您返回的是某个Object
类型的集合,即System.Collections.Generic.List
1 [DOOR.Core.Web.Models.DataTaxonomy.Object]`,显然是行不通的。
您可能要关注:
IndexModel model = new IndexModel();
model.Object = await _context.objects.ToListAsync();
return View(model);
答案 1 :(得分:-1)
我们无法查看类型,但是很明显返回到视图的模型不是预期的类型。
放置一些断点并查看返回的内容,您需要将其转换为
DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel
我还有另一件事,我非常怀疑在返回视图时使用异步。如果我是我,则不会这样做,请在要获取数据时使用它,但在返回视图时不使用