ViewComponent возвращает, но модель имеет нулевое представление при использовании значения маршрута - PullRequest
0 голосов
/ 06 ноября 2019

Все еще плохо знакомы с бритвенными страницами и компонентами представления, но несколько раз были вокруг блока с asp.net

Не уверен, почему у моего компонента представления нет заполненной его модели. Одна вещь, которую я заметил, что я сделал, что это неправильно, это поставить параметр маршрута наверхунапример.

@page "{handler?}"

Я знаю (теперь, по крайней мере), что ViewComponents не предназначены для прямой маршрутизации в качестве конечных точек, но теперь мне интересно, что делает использование @page с атрибутом route для предотвращения моделисвязывание происходит? Я только методом проб / ошибок обнаружил, что удаление этого позволяет моей модели заполняться внутри ViewComponent.

Вот код

ViewComponent

public class TestViewComponent : ViewComponent
{

    public async Task<IViewComponentResult> InvokeAsync(Data.CustomerListModel cust)
    {
        List<Data.CustomerListModel> clist = new List<Data.CustomerListModel>();
        clist.Add(new Data.CustomerListModel() { Customer = "fred" });
        clist.Add(new Data.CustomerListModel() { Customer = "wilma" });

        var dlist = clist.AsEnumerable();

        return View(dlist);
    }
}

Представление для ViewComponent, Default.html

@page "{handler?}"
@using System.Collections.Generic
@addTagHelper *, TelerikAspnetCoreApp1
@model IEnumerable<Data.CustomerListModel>

<h1>Default</h1>

<h3>Machine name @Environment.MachineName</h3>
<ul>
    @foreach (Data.CustomerListModel c in Model)
    {
        <li>@c.Customer</li>
    }
</ul>

CustomerListModel

namespace TelerikAspNetCoreApp1.Data
{
    public class CustomerListModel
    {
        public string Customer { get; set; }
    }
}

Родительский вид, Index.cshtml

<div>
    @await Component.InvokeAsync("Test",new { Name = "tester123" })
</div>

1 Ответ

0 голосов
/ 07 ноября 2019

Представление ViewComponent во многом похоже на файл представления Razor, используемый в приложении ASP.NET Core с контроллерами и представлениями. Затем директива @page используется на странице Razor и превращает файл в действие MVC, что означает, что он обрабатывает запросы напрямую, без прохождения через контроллер. @page влияет на поведение других конструкций Razor.

Вы можете уделить время чтению документации MS на страницах просмотра компонентов и бритвы:

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-3.0

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.0&tabs=visual-studio

...