Интерактивность страницы Blazor и режим рендеринга

Я новичок в .NET и в настоящее время работаю над созданием приложения с использованием чистой архитектуры и компонентов/страниц Blazor. У меня есть решение с двумя проектами: один для выполнения приложения (основной), а другой для макетов (компоненты/страницы/код и т. д.).

В Program.cs основного проекта я сопоставил компонент App.razor и добавил к нему интерактивный режим рендеринга. На первой странице, расположенной в основном проекте, есть форма, вызывающая класс ControllerBase, который перенаправляет нас на другую страницу, расположенную в проекте макета, которая представляет собой библиотеку классов Razor.

Однако моя проблема в том, что вторая страница не является интерактивной даже после добавления к ней интерактивного режима рендеринга. Я даже попробовал добавить созданный мной компонент, и он работал нормально, когда я добавил его на страницу, расположенную в основном проекте. Я заметил, что файл blazor.web.js исчезает, когда я перехожу на вторую страницу, и это может быть проблемой.

Скриншоты для пояснения:

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
582
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратитесь к следующему примеру кода:

  1. Создайте библиотеку классов 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";
         }
     }
    
  2. Создайте приложение Blazor Asp.net 8 (используйте шаблон веб-приложения Blazor и выберите режим интерактивной визуализации сервера). Используйте это приложение в качестве основного приложения.

  3. В главном приложении добавьте ссылку на проект RazorClassLibrary3.

  4. В главном приложении добавьте сборку библиотеки классов 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>
    
  5. Запустите основное приложение и перейдите на вторую страницу, результат будет выглядеть следующим образом:

    нажмите кнопку, вот так:

    Как мы видим, вторая страница интерактивная. Вы можете обратиться к приведенному выше образцу.

это сработало отлично. Большое спасибо! Еще один вопрос, если у вас есть время. Является ли этот подход оптимальным для разделения ответственности или мне следует просто оставить страницы в основном проекте?

Lemon Grab 01.05.2024 14:48

@Lemon Grab, это зависит от ваших требований: если вы хотите инкапсулировать и повторно использовать связанные страницы/компоненты в разных приложениях или если вы хотите использовать автономный проект для разработки/управления этими страницами/компонентами, вы можете использовать библиотеку классов Razor . В противном случае вы можете попробовать поместить их в основной проект.

Zhi Lv 02.05.2024 04:05

Другие вопросы по теме