Как объявить глобальные переменные в Blazor

Как объявить глобальные переменные в Blazor, например, у меня есть входные вопросы в Index. Я хочу использовать это на другой странице под названием Quiz. https://github.com/KalyanAllam/MauiAppMCQs/

@page "/"
<h1>  Quiz </h1>
Select Input Questions and 
Click on  Quiz  .
<div class = "row">
    <p>Questions:</p>
    <input type = "range" min = "5" max = "20" step = "5" @bind = "@inputquestions"
     @bind:event = "oninput" />
</div>
<p>@inputquestions</p>
@code {
    public  int inputquestions=5;
}

Глобальные переменные на веб-сайте обычно не являются разумным выбором, поскольку все экземпляры имеют одно и то же значение...

FreakyAli 23.05.2024 17:04
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Для развертывания Сайтов с использованием Blazor, Angular и React с репозиторием на GitHub на Cloudflare
Как развернуть сайты с помощью Blazor, Angular и React с репозиторием на GitHub на Cloudflare.
0
1
163
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Имейте в виду, что любые «глобальные» данные предназначены для «всех пользователей». Что означает «все пользователи» во многом зависит от выбранного вами режима интерактивности.

  • Blazor wasm (и maui): ваш статический класс или синглтон предназначен только для одного пользователя, и вы можете безопасно использовать оба.
  • Сервер Blazor (и SSR): не используйте статические классы и синглтоны для хранения данных, связанных с пользователем.

Статические классы

public static class MyStaticClass
{
  public int InputQuestions {get;set;} =5;
}
<input type = "range" min = "5" max = "20" step = "5" @bind = "@MyStaticClass.InputQuestions"
     @bind:event = "oninput" />

Или услуга

public MyClass
{
public int InputQuestions {get;set;} =5;
}
//program.cs
builder.Services.AddSingleton<MyClass>();

@inject MyClass myClass
...
@bind = "@myClass.InputQuestions"

Чтобы узнать разницу между этими двумя, найдите класс Singleton и Static.

Обратите внимание, что Singleton в Blazor-Server означает, что все пользователи используют один и тот же экземпляр. То же самое для статического класса. В Blazor-Wasm это один и тот же экземпляр для одного пользователя, использующего приложение.

jeb 23.05.2024 17:03

@jeb ну, это правда. Мой разум был «заперт» в блазоре, где эти соображения исчезли. Я отредактирую ответ.

Alamakanambra 23.05.2024 17:55

@Alamakanambra Я внес вышеперечисленные изменения, но исходный код с двусторонней привязкой, похоже, не работает. На следующую страницу всегда передается 5, даже если я меняю его на 10 или 15, вот мой исходный код github.com/KalyanAllam/MauiAppMCQs

KALYANA ALLAM 23.05.2024 18:02

@KALYANAALLAM Привязка работает, и значение попадает в myClass, верно? Где еще можно использовать ваш MyClass. Потому что я не вижу ничего в вашем коде. Только в вашем QuizCardBase.cs, где вы снова инициализируете (= new MyClass()) переменную (не получая ее из контейнера DI)...

Alamakanambra 23.05.2024 18:27

@Alamakanambra Я хочу использовать myClass в QuizCardBase.cs. Я инициализирую переменную (= new MyClass()) как нулевую ссылку на ее выдачу, пожалуйста, предложите, как мне получить из контейнера DI if (count == myclass.InputQuestions) { stopflag = "Н"; }

KALYANA ALLAM 23.05.2024 18:41

Я пытался использовать параметр Route, это сработало

KALYANA ALLAM 23.05.2024 19:51

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