视图组件-不正确的模型传递给ViewDataDictionary

时间:2019-02-27 12:20:14

标签: c# asp.net-mvc razor

我正在尝试将一些数据传递到我的布局中,但是无法使其正常工作。我以前已经成功完成了此操作,但是这次,无论我在尝试什么,它都行不通。

我收到此错误:

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>
...

2 个答案:

答案 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

我还有另一件事,我非常怀疑在返回视图时使用异步。如果我是我,则不会这样做,请在要获取数据时使用它,但在返回视图时不使用