Blazor WebAssembly: несколько маршрутов при рендеринге одного компонента - PullRequest
1 голос
/ 28 мая 2020

Я на самом деле экспериментирую с Blazor WebAssembly.

Все работает нормально, кроме одного.

Идея в том, что я хочу использовать один и тот же компонент для создания или редактирования элемента.

Имя компонента - CreateOrEdit.razor, и у меня есть два маршрута:

@page "/master/maker/create"
@page "/master/maker/{id:int}"

Идентификатор захватывается и сохраняется в свойстве:

[Parameter]
public int Id { get; set; }

У меня также есть getter, чтобы определить, находимся ли мы на странице редактирования или создания.

public bool IsEditPage { get => Id > 0; }

И используется в таком представлении

@if (IsEditPage)
{
    <Button Clicked="OnEditButtonClicked"
            Color="@(m_EditMode ? Color.Danger : Color.Primary)" Class="mb-2">
        @(m_EditMode ? "Save" : "Edit")
    </Button>
    <Row>
        <Column ColumnSize=" ColumnSize.Is2" Class="my-auto">
            <span>ID</span>
        </Column>
        <Column ColumnSize="ColumnSize.Is8">
            <span>@Id</span>
        </Column>
        <Column ColumnSize="ColumnSize.Is2"></Column>
    </Row>
}
else
{
    <Button Clicked="OnCreateButtonClicked" Color="Color.Danger" Class="mb-2">Create</Button>
}

Если мы находимся в режиме редактирования, мы получили идентификатор отобразится элемент и кнопка «Изменить». Затем, если мы нажмем кнопку «Редактировать», элементы формы можно будет редактировать. Кнопка «Редактировать» изменится на «Сохранить». Затем данные отправляются в API.

В режиме создания отображается кнопка «Сохранить». Просто щелкнув по нему, отправьте данные в API. Я планирую добавить проверку, но проблема не здесь.

Проблема ниже:

Предположим, мы сначала переходим на страницу редактирования «localhost / master / maker / 1. "а затем мы переходим на страницу создания" localhost / master / maker / create "(проблема такая же, если мы создаем элемент и затем перенаправляем на страницу редактирования); Компонент не выполняет повторную визуализацию, потому что он использует тот же компонент. Более того, метод OnInitializedAsyn c () больше не вызывается. Я не хочу, чтобы два компонента были разделены одним и тем же кодом, и я не хочу снова выполнять принудительную загрузку, потому что на Io C есть несколько ограниченных служб для кэширования данных.

Может ли кто-нибудь мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...