Я изучаю, как использовать .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>