Невозможно отобразить компонент блейзера

При использовании Visual Studio 2019 preview 2.0, .NET core SDK 3.0.100-preview8-013656. Серверное приложение Blazor.

Документы Blazor говорят, что способ визуализации компонента - это вызвать Html.RenderComponentAsync. Я нигде не могу найти этот статический Html класс.
Когда я заглядываю в Microsoft.AspNetCore.Components.dll в каталоге SDK, я вижу, что у него есть HtmlRenderer класс с таким методом, но он не статический.
Когда я смотрю на исходный код AspNetCore, я вижу HtmlHelperComponentExtensions класс в пространстве имен Microsoft.AspNetCore.Mvc.Rendering

MVC? Я очень запутался. Я использую последнюю версию SDK, документ просто старый?

Если я попытаюсь перейти непосредственно к маршруту для моего компонента, я просто получу (await Html.RenderComponentAsync ()), записанный непосредственно в мой документ вместе с исключениями signalR для консоли.


person dudeNumber4    schedule 30.08.2019    source источник


Ответы (2)


Когда я смотрю на источник AspNetCore, я вижу класс HtmlHelperComponentExtensions в пространстве имен Microsoft.AspNetCore.Mvc.Rendering

MVC? Я очень запутался. Я использую последнюю версию SDK, документ просто старый?

Нет, документы не старые ... Html.RenderComponentAsync не является Blazor. Blazor не имеет концепции помощников Html, и его файлы имеют расширения .razor для файлов компонентов или .cs для обычных классов.

@(await Html.RenderComponentAsync<Counter>(new { IncrementAmount = 10 })) 

В приведенном выше коде используется вспомогательный метод Html RenderComponentAsync для визуализации компонента с именем Counter, встроенного в приложение MVC, передавая его свойству IncrementAmount значение 10.

Если вы выберете серверное приложение Blazor, в папке Pages будет создан файл с именем _Host.cshtml. Этот файл содержит метод RenderComponentAsync, спецификатором типа которого является App, который является корневым элементом приложения Blazor, таким образом выполняя предварительную визуализацию всего приложения.

Действия: Обязательно установите последнюю предварительную версию Visual Studio 2019: .NET Core 3.0 Preview 8 требует Visual Studio 2019 16.3 Preview 2 или более поздней версии.

Чтобы установить последний шаблон Blazor WebAssembly, также выполните следующую команду: dotnet new -i Microsoft.AspNetCore.Blazor.Templates :: 3.0.0-preview8.19405.7

Вы должны выбрать Blazor Server App (серверный Blazor), и все будет готово. Больше ничего добавлять не нужно.

person enet    schedule 30.08.2019
comment
Вы указали мне правильное направление (_Host.cshtml). Когда я слежу за источником там, он приводит меня к методу, который живет в Microsoft.AspNetCore.Mvc.ViewFeatures (больше MVC, это все еще сбивает меня с толку). И я до сих пор не могу сослаться на Html.RenderStaticComponentAsync из моего Index.razor, хотя он у меня точно такой, как в документации. Но думаю, это отдельная проблема. - person dudeNumber4; 03.09.2019
comment
Еще раз, Html.RenderStaticComponentAsync - это не Blazor. В Blazor нет концепции помощников Html. Помощники HTML используются в MVC и Razor Pages. _Host.cshtml - это файл Razor, а не файл Blazor. Таким образом, если вы хотите использовать Html.RenderStaticComponentAsync для включения предварительного рендеринга, вы должны использовать его в файле расширения .cshtml. И нет, вы не можете ссылаться на Html.RenderStaticComponentAsync из моего Index.razor. Но вы можете ссылаться на Html.RenderStaticComponentAsync из файла расширения .cshtml. Я знаю, это сбивает с толку и действительно требует некоторых усилий по обучению. - person enet; 04.09.2019
comment
В таком случае это ужасно сбивает с толку. Html.RenderStaticComponentAsync - это не Blazor: ну, это в документации Blazor. вы можете ссылаться на Html.RenderStaticComponentAsync из файла расширения .cshtml: это задокументированный способ визуализации компонентов, и когда я добавляю новый компонент в проект Blazor, я получаю файл .razor. - person dudeNumber4; 09.09.2019

Проблема в том, что вы хотите использовать Html.RenderComponentAsync неправильно, поэтому он не работает и, вероятно, вы не можете исходить из этого. ваша реальная проблема заключается в том, что вы хотите отобразить компонент Razer внутри другого компонента Razer или страницы блейзера в случае полного приложения блейзера. На данный момент решение состоит в том, что вместо этого

@(await Html.RenderComponentAsync<Counter>(new { IncrementAmount = 10 })) 

просто сделай это

\<Counter IncrementAmount = 10/> 
person Albert Takaruza    schedule 04.02.2021