Компонент представления .NET Core 2.0 не заполняет свойство @Model - PullRequest
0 голосов
/ 09 октября 2018

Я изучаю, как использовать .NET Core 2.0, и одна из его частей, которую мне нужно использовать, это View Component.

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

Однако свойство @model System.Collections.Generic.List<Common.TestItem> всегда равно null;ViewContext.ViewData.Model заполняется правильно.

Есть идеи почему?Код размещен ниже.


Сервис

TestItemService класс

public class TestItemService
    {
        public List<TestItem> GetItems()
        {
            return new List<TestItem>()
            {
                new TestItem(){ id=0, date=DateTime.Today.AddDays(-2), Name="TestItem1" },
                 new TestItem(){ id=1, date=DateTime.Today.AddDays(-4), Name="TestItem2" },
                  new TestItem(){ id=2, date=DateTime.Today.AddDays(3), Name="TestItem3" },
            };
        }
    }

Внедрение зависимостей

В классе Startup в методе ConfigureServices:

services.AddScoped<TestItemService.TestItemService, TestItemService.TestItemService>();

ViewComponent

public class TestViewComponent : ViewComponent
{
    private readonly TestItemService.TestItemService service;
    public TestViewComponent(TestItemService.TestItemService context)
    {
        service = context;
    }


    public async Task<IViewComponentResult> InvokeAsync()
    {
        List<TestItem> items = await GetItemsAsync();
        return View("Default",items);
    }
    public Task<List<TestItem>> GetItemsAsync()
    {
        return service.GetItems().Where(i => i != null).ToAsyncEnumerable().ToList();
    }
}

Просмотр

@page
@model System.Collections.Generic.List<Common.TestItem>




<h3>Priority Items</h3>
<ul>
    @foreach (var todo in (List<Common.TestItem>)ViewContext.ViewData.Model)
    {
        <li>@todo.Name</li>
    }
</ul>

1 Ответ

0 голосов
/ 10 октября 2018

Я нашел проблему.В моем файле cshtml компонента view у меня был тег @page вверху, который по какой-то причине сломал это.Я заменю принятый ответ на чужой, если они объяснят , почему , который сломал его.Что делает тег @page>

...