Я использую приложение blazor sever.
У меня есть элемент управления, который при нажатии с помощью обработчика событий @onclick я хочу перейти на новую страницу с помощью NavigationManager в методе события щелчка. на самом деле не имеет значения, что это за элемент управления (button, a, tr, et c), все они имеют одинаковое поведение
, если я помещаю точку останова в HTML, я вижу текущий страница повторно отрисовывается перед переходом на новую страницу.
простой способ воспроизвести это поведение - создать новый проект blazor и на странице counter.razor изменить код на этот
@page "/counter"
<h1>Counter</h1>
@if (1 == 1)
{
<p>Current count: @currentCount</p>
}
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private void IncrementCount()
{
//currentCount++;
}
}
поместите точку останова в строку HTML «@if (1 == 1)», когда кнопка нажата, он вызывает событие щелчка, которое ничего не делает (код закомментирован), затем он повторно отображает страницу и точка останова достигнута. То же самое происходит, если я добавляю код в событие щелчка, вызывающее NavigationManager для перехода от страницы, он повторно обрабатывается перед тем, как покинуть страницу, когда на странице ничего не изменилось.
добавление onclick: preventDefault и / или @onclick: stopPropagation не меняет это
единственное, что я обнаружил, что действительно работает - это добавление
private bool c_blnStopRendering = false;
protected override bool ShouldRender()
{
if (c_blnStopRendering == true) { return false; }
return base.ShouldRender();
}
и установка c_blnStopRendering = true; в событии щелчка, но это похоже на убийство и очень ручное добавление его везде, где это необходимо