[Blazor] Url에 parameter 여러개 실어보내기

http://127.0.0.1:9999/tickets?page=1&search=test&itemcount=20&filter=1024

이런식으로 url을 구성할 필요가 생겼습니다.

그 이유는 어떤 페이지, 어떤 결과 화면을 다른 사람에게 링크로 공유하려면

parameter가 전부 url에 포함되어 있어야 한다고 판단했기 때문이구요.

또 아래와 같이 파라미터를 설정해놓았습니다.


    protected int _CurrentPage = 1;
    [SupplyParameterFromQuery(Name = "page")]
    [Parameter]
    public int CurrentPage
    {
        get { return _CurrentPage; }
        set
        {
            if (value < 1)
            {
                _CurrentPage = 1;
            }
            else
            {
                _CurrentPage = value;
            }
        }
    }

    [Parameter]
    [SupplyParameterFromQuery(Name = "search")]
    public string search { get; set; } = "";
	

근데 문제가 있습니다.

OnParametersSet 메서드를 override하면 선언된 Parameter의 개수만큼 호출이 되어서,
불필요한 작업이 반복되는 것 같아서요…

이걸 한번만 호출되도록 하는 방법은 없을까요?

아니면 최초 제가 url에 parameter를 실어보내는 접근방법이 잘못된걸까요?

2개의 좋아요

SetParametersAsync를 override 해서 해보세요. 저도 비슷하게 구현 했었네요.

protected bool AfterRender { get; private set; } = false;

protected override void OnAfterRender(bool firstRender)
{
    AfterRender = true;
    base.OnAfterRender(firstRender);
}

public override async Task SetParametersAsync(ParameterView parameters)
{
    await base.SetParametersAsync(parameters);
    if (AfterRender)
    {
        await LoadPageAsync();
    }
}
2개의 좋아요

모든 코드를 보지 않아서 잘 모르겠지만, 제가 테스트했을 때는 여러 params를 전달한다고 OnParametersSet가 여러번 호출되지 않습니다. 라이프사이클 메소드 중에서 URL을 변경하는 코드가 있는지 확인 가능할까요?

3개의 좋아요

안녕하세요. 김진석입니다.

parameter가 2개여서 개수만큼 호출된다고 생각하신 것 같습니다.
(저도 처음 보고 헛… 이라고 생각했습니다.)
애초에 blazor가 parameter의 개수와 관계없이 2번 호출된다고 이해하시면 됩니다.
상세한 설명은 아래 링크를 봐주세요. 저보다 잘 설명하시네요.

혹시 꼭 한 번만 호출하게 하려면 아래 링크에서 _Host.cshtml을 수정하면 된다고 되어 있습니다.

(변경해보니 한번만 호출됩니다.)

  • url에 parameter로 실어보내는 방법이 이상한 것 같지는 않습니다.
  • 멋대로 blazor server 프로젝트라고 생각했는데… 맞을 꺼라 믿습니다. ㅎㅎㅎ

감사합니다.

6개의 좋아요

맞습니다. navigateTo로 페이지 이동하는 함수가 있어요.

image

일단 화면 구성이 이렇게 되어있고요.

처음 페이지 로딩시 기본 선택된 필터가 있고, 그 필터에 따라서 로딩을 해서 뿌려줘야 합니다.

OnAfterRender, OnParameterSet을 override하다보니 2번 호출된 것 같아요…

질문 내용과 소스를 다시 정리해서 한번 올리겠습니다.

1개의 좋아요

_Host.cshtml 파일을 수정하고나니 OnParameterSet이 두번 호출되지 않네요…

일단 아래와 같이 수정했습니다.

@*<component type="typeof(App)" render-mode="ServerPrerendered" /> ----- 주석처리 *@
<component type="typeof(App)" render-mode="Server" />

페이지 렌더링할때 호출하고, Filter버튼에 따라 또 호출하고 그러다보니 뒤죽박죽 되어버렸네요…ㅎㅎ

일단 render-mode를 수정하는 방안으로 진행할 예정입니다.

그리고 Blazor Server 맞습니다!^^

답변 감사합니다!

2개의 좋아요