【问题标题】:View Component - Incorrect model passed into ViewDataDictionary视图组件 - 传入 ViewDataDictionary 的模型不正确
【发布时间】:2019-02-28 23:52:28
【问题描述】:

我正在尝试将一些数据传递到我的布局中,但无法正常工作。我以前成功地做到了,但这一次,无论我尝试什么,它都不起作用。

我收到此错误:

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

【问题讨论】:

标签: c# asp.net-mvc razor


【解决方案1】:

当您的视图使用不同的对象进行强类型化时,您将返回不同的对象以进行查看。显然,您似乎忘记将返回的 IndexModel 发送回来,并填充了 Object 属性。

由于您的视图有@model DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel,而您返回的是一些Object 类型的集合,即System.Collections.Generic.List1[DOOR.Core.Web.Models.DataTaxonomy.Object]`,这显然不起作用。

您可能想要以下内容:

IndexModel model = new IndexModel();
model.Object = await _context.objects.ToListAsync();
return View(model);

【讨论】:

    【解决方案2】:

    我们无法查看类型,但很明显返回到视图的模型不是预期的类型。

    放置一些断点并查看您返回的内容,您需要将其转换为

    DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel
    

    我还有一件事,我对在返回视图时使用异步有很大的怀疑。如果我是你,我不会这样做,当你想获取数据时使用它,而不是在返回视图时使用它

    【讨论】:

      猜你喜欢
      • 2017-09-26
      • 2022-01-19
      • 2021-07-31
      • 2018-05-26
      • 1970-01-01
      • 2019-08-31
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多