Я новичок в .NET и в настоящее время работаю над созданием приложения с использованием чистой архитектуры и компонентов/страниц Blazor. У меня есть решение с двумя проектами: один для выполнения приложения (основной), а другой для макетов (компоненты/страницы/код и т. д.).
В Program.cs основного проекта я сопоставил компонент App.razor и добавил к нему интерактивный режим рендеринга. На первой странице, расположенной в основном проекте, есть форма, вызывающая класс ControllerBase, который перенаправляет нас на другую страницу, расположенную в проекте макета, которая представляет собой библиотеку классов Razor.
Однако моя проблема в том, что вторая страница не является интерактивной даже после добавления к ней интерактивного режима рендеринга. Я даже попробовал добавить созданный мной компонент, и он работал нормально, когда я добавил его на страницу, расположенную в основном проекте. Я заметил, что файл blazor.web.js исчезает, когда я перехожу на вторую страницу, и это может быть проблемой.
Скриншоты для пояснения:





Обратитесь к следующему примеру кода:
Создайте библиотеку классов Razor (RazorClassLibrary3) и измените страницу Component1.razor, как показано ниже:
@page "/secondpage"
@* you can also add the following reference in the _Imports.razor page. *@
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@rendermode InteractiveServer
<div class = "my-component">
This component is defined in the <strong>RazorClassLibrary3</strong> library.
</div>
<button @onclick = "UpdateMessage">Click</button>
<div>
@message
</div>
@code {
public string message = "initial data";
public void UpdateMessage()
{
message = "Hello";
}
}
Создайте приложение Blazor Asp.net 8 (используйте шаблон веб-приложения Blazor и выберите режим интерактивной визуализации сервера). Используйте это приложение в качестве основного приложения.
В главном приложении добавьте ссылку на проект RazorClassLibrary3.
В главном приложении добавьте сборку библиотеки классов Razor.
в файл Program.cs добавьте следующий код (измените имя проекта на свое):
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode()
.AddAdditionalAssemblies(typeof(RazorClassLibrary3.Component1).Assembly);
В Главном приложении измените код, как показано ниже (измените имя проекта на свое):
<Router AppAssembly = "typeof(Program).Assembly"
AdditionalAssemblies = "new[] { typeof(RazorClassLibrary3.Component1).Assembly }" >
<Found Context = "routeData">
<RouteView RouteData = "routeData" DefaultLayout = "typeof(Layout.MainLayout)" />
<FocusOnNavigate RouteData = "routeData" Selector = "h1" />
</Found>
</Router>
Запустите основное приложение и перейдите на вторую страницу, результат будет выглядеть следующим образом:
нажмите кнопку, вот так:
Как мы видим, вторая страница интерактивная. Вы можете обратиться к приведенному выше образцу.
@Lemon Grab, это зависит от ваших требований: если вы хотите инкапсулировать и повторно использовать связанные страницы/компоненты в разных приложениях или если вы хотите использовать автономный проект для разработки/управления этими страницами/компонентами, вы можете использовать библиотеку классов Razor . В противном случае вы можете попробовать поместить их в основной проект.
это сработало отлично. Большое спасибо! Еще один вопрос, если у вас есть время. Является ли этот подход оптимальным для разделения ответственности или мне следует просто оставить страницы в основном проекте?