#c# #timer #blazor
Вопрос:
У меня есть div с сообщением:
@if (alertMessageShow)
{
<div class="alert alert-success" style="margin-left: 50px"> Your changes have been saved </div>
}
@code {
bool alertMessageShow = false;
}
alertMessageShow
будет установлено true
значение, когда пользователь что-то редактирует на странице.
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как заставить предупреждающее сообщение исчезнуть, например, через 5 секунд.
Я попытался настроить таймер, а затем установить значение «Истекло alertmessageshow
false
«, но это, похоже, не сработало.
Я продолжал получать InvalidOperationException
ответ .
Вот что я пробовал до сих пор:
void alertMessage()
{
alertMessageShow = true;
Timer _timer = new Timer();
_timer.Interval = 5000;
_timer.Elapsed = AlertTimerElapsed;
_timer.Start();
}
private void AlertTimerElapsed(Object source, ElapsedEventArgs e)
{
alertMessageShow = false;
}
Поэтому, как только функция alertMessage будет вызвана, она установит переменную в значение true, затем создаст новый экземпляр таймера на 5 секунд, а затем по истечении времени изменит его обратно на false.
Кнопка
<RadzenButton Icon="add_circle_outline" style="margin-bottom: 10px" Text="Nani" Click="@alertMessage" />
Комментарии:
1. Можете ли вы поделиться кодом для решения таймера, которое вы пробовали? Было бы неплохо посмотреть, что вы пробовали, и ошибку, которая поможет вам отладить
![]()
2. О да, мне так жаль !
3. Как вызвать функцию alertMessage?
4. @viveknuna, когда пользователь нажимает на кнопку
5. @jacky, пожалуйста, поделитесь кодом
Ответ №1:
Следующий фрагмент кода демонстрирует, как отобразить модальный div и как его скрыть. Обратите внимание, что использование объекта таймера не является необходимым и может считаться чрезмерно квалифицированным.
Копирование и тестирование:
@page "/"
@if (alertMessageShow)
{
<div class="alert alert-success" style="margin-left: 50px">@message</div>
}
<button type="button" @onclick="Save">Save Update</button>
@code {
private bool alertMessageShow = false;
private string message;
private async Task Save()
{
message = "Saving update...";
alertMessageShow = true;
// Simulate saving operation, say, to a database. In a real world application the duration of
// the delay is determined by the operation itslef; in other words, you do not use the line below
await Task.Delay(5000);
message = "Updates saved...";
await InvokeAsync(() => StateHasChanged());
// Wait 3 seconds for the user to read the message, and then close the modal
await Task.Delay(3000);
alertMessageShow = false;
}
}
Примечание: Я бы посоветовал вам использовать модальный диалог уведомления о тосте для таких операций. Посмотрите, как криссейнти это делает…