[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 Likes

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 Likes

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

3 Likes

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

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

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

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

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

감사합니다.

6 Likes

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

image

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

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

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

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

1 Like

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

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

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

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

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

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

답변 감사합니다!

2 Likes