#blazor-server-side
Вопрос:
Я пытаюсь показать и отключить кнопку, добавив класс «отключено» в компоненте (предварительно скрытый), но не удалось-это не работает. Где я сделал что-то не так ?
Кнопка Компонента :
lt;div class="form-group"gt; lt;button class="btn btn-primary @disabled"gt;Disable Melt;/buttongt; lt;/divgt; @code { string _password; string disabled = ""; public void Disable() { disabled = "disabled"; } }
Индекс.бритва :
@page "/" lt;h1gt;How to disable button in component ?lt;/h1gt; lt;button class="btn btn-primary" @onclick="ShowAndDisableButton"gt;Show and disable buttonlt;/buttongt; @if (show) { lt;ButtonComponent @ref="button"/gt; } @code { ButtonComponent button = new(); bool show = false; void ShowAndDisableButton() { show = true; button.Disable(); } }
ОБНОВЛЕНО : если я изменю код кнопки ShowAndDisableButton на
async Task ShowAndDisableButton() { show = true; await Task.Delay(TimeSpan.FromMilliseconds(10)); // add this, wait for a while button.Disable(); }
и измените код кнопки в index.razor на
lt;button class="btn btn-primary" @onclick="()=gt;ShowAndDisableButton()"gt;Show and disable buttonlt;/buttongt;
это работает. но я не знаю, почему и не хочу использовать такой способ, есть ли какой-нибудь правильный способ?
Комментарии:
1. Вам нужно сделать две вещи: (1) изменить свою переменную; (2) обновить пользовательский интерфейс. Когда задача завершается, пользовательский интерфейс обновляется автоматически. Когда метод void завершается, это не так-вам придется вызвать StateHasChanged();
Ответ №1:
Проблема в том, что button.Disable();
это не вызывает нормальной повторной передачи.
И это чрезмерно сложный способ ведения дел.
На странице:
@if (show) { lt;ButtonComponent Disabled="!show" /gt; } @code { //ButtonComponent button = new(); bool show = false; void ShowAndDisableButton() { show = true; //button.Disable(); } }
и сама кнопка:
lt;div class="form-group"gt; lt;button class="btn btn-primary" disabled="Disabled"gt;Disable Melt;/buttongt; lt;/divgt; @code { string _password; // string disabled = ""; [Parameter] public bool Disabled {get; set; } }
Но вы не сможете воспользоваться этой кнопкой.
Комментарии:
1. это работает, спасибо.
Ответ №2:
Используйте disabled=»@disabledState», где disabledState-логическое значение
Комментарии:
1. та же проблема, что и у меня, не работает.