Как остановить повторную рендеринг страницы blazor @onclick - PullRequest
0 голосов
/ 07 августа 2020

Я использую приложение 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; в событии щелчка, но это похоже на убийство и очень ручное добавление его везде, где это необходимо

1 Ответ

0 голосов
/ 07 августа 2020

На данный момент это единственный способ сделать это. В бэклоге есть запрос https://github.com/dotnet/aspnetcore/issues/18919

...