Компонент View - неверная модель передана в ViewDataDictionary - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь передать некоторые данные в свой макет, но не могу заставить его работать.Я успешно сделал это раньше, но на этот раз, независимо от того, что я пытаюсь, это просто не работает.

Я получаю эту ошибку:

InvalidOperationException: модельЭлемент, передаваемый в ViewDataDictionary, имеет тип 'System.Collections.Generic.List`1 [DOOR.Core.Web.Models.DataTaxonomy.Object]', но для этого экземпляра ViewDataDictionary требуется элемент модели типа 'DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel '.

Кто-нибудь сталкивался с чем-то похожим в прошлом?

My 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>
}

My ViewComponent Class:

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 голосов
/ 27 февраля 2019

Мы не можем просматривать типы, но очевидно, что модель, возвращаемая в представление, не соответствует ожидаемому типу.

Поставьте несколько точек останова и посмотрите, что вы возвращаете, вам нужно конвертировать из этого в

DOOR.Core.Web.Pages.DataTaxonomyTool.IndexModel

Еще одна вещь от меня, у меня есть серьезные сомнения относительно использования асинхронности при возврате представления,Я бы не стал этого делать на вашем месте, используйте его, когда хотите получить данные, а не когда вы возвращаете представление

0 голосов
/ 27 февраля 2019

Вы возвращаете другой объект для просмотра, в то время как ваш вид строго типизирован с другим.Похоже, что вы забыли отправить обратно 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...