Проблема с изменением состояния для обновления инструкции @if

#c# #asp.net #razor #blazor

Вопрос:

Поэтому у меня возникли проблемы с тем, чтобы моя страница Razor обновила заявление if.

Идея заключается в том, что когда пользователь нажимает кнопку, он пересчитывает строку в поисках количества значений X, прямо сейчас мы ищем пробелы. Если есть один пробел, я хочу, чтобы поле ввода было заблокировано (у пользователя нет причин редактировать его). Если там больше одного места, оно не заперто.

Ниже приведен оператор if, содержащий теги

 @if (NumOfSelectedValue <= 1)  {  <input class="form-control-sm" value="1" style="width: 40px" disabled />  }  else if (NumOfSelectedValue > 1)  {  <input class="form-control-sm" value="@NumOfSelectedValue" style="width: 40px" />  }  

И вот логика того, как я думал, что он будет обновлен.

 public void SpaceSelected() //ive used "async task" {  int NumOfSelectedValue = SelectedCell.Count(x => x == ' ');//counting how many spaces there are with Linq  Console.WriteLine(NumOfSelectedValue);//post num of spaces in the console   //other versions ive used   //StateHasChanged();//update the if statement  //await InvokeAsync(StateHasChanged);   InvokeAsync(StateHasChanged); }  

Комментарии:

1. Ваш код razor проверяет NumOfSelectedValue , что, по-видимому, является полем, которое у вас есть, или является ошибкой во время компиляции. Локальная переменная NumOfSelectedValue , в которой вы определяете, SpaceSelected не представляет одно и то же и фактически не выполняет ничего, что могло бы повлиять на код razor.

2. ах, я этого не показывал, но над вторым фрагментом кода у меня есть общедоступная строка NumOfSelectedValue { get; set; }

3. Да, это ошибка C# — удалить int префикс из NumOfSelectedValue вашего метода.

Ответ №1:

Согласно вашим комментариям, у вас есть публичное свойство с именем NumOfSelectedValue . Это отдельно от локальной переменной NumOfSelectedValue , в которой вы определили SpaceSelected . Ваше решение состоит в том, чтобы не объявлять эту локальную переменную, а вместо этого просто обновить свойство:

 public void SpaceSelected() {  NumOfSelectedValue = SelectedCell.Count(x => x == ' ');  StateHasChanged(); // Probably not necessary unless you're calling this method in the background }  

Обратите внимание, что у нас больше нет int части перед назначением, которая объявляла переменную.

Комментарии:

1. Я бы поддержал тебя, но я недостаточно крут.

2. @Нука, рад, что смог помочь. 🙂