web-dev-qa-db-ja.com

サーバー側のブレイザーでかみそりコンポーネントにパラメーターを渡す方法は?

かみそりコンポーネントにパラメーターを渡すにはどうすればよいですか?

これまでに試しました

@(await Html.RenderComponentAsync<Rateplan>(RenderMode.ServerPrerendered, new { id= 100}))

しかし、私はエラーを受け取ります

InvalidOperationException:パラメータ付きのサーバーコンポーネントの事前レンダリングはサポートされていません。

RenderMode.ServerPrerenderedで同じことを試しましたが、エラーが表示されます

InvalidOperationException:パラメータを持つサーバーコンポーネントはサポートされていません。

私もやってみました

<Rateplan Id="100"></Rateplan>

しかし、それでもコンポーネントは起動しませんでした。

9
mko

パラメータを受け入れるコンポーネントでは、プロパティをパラメータとしてマークする必要があります

お気に入り

[Parameter]
public List<Player> Players { get; set; }

その後、次のようにパラメータを渡すことができるはずです

<Componentname param-Players="@players"></Componentname>

(この例では、@ playersはローカル変数です)

7

問題と回避策について説明します この記事で 。 (GetModelにはGetCustomerIdという名前を付ける必要があるため、少しバグがあります)例外のとおり、パラメーターの受け渡しはサポートされていません。

ASP.NET Core 3.1を待つことができます パラメーターを渡す機能が復元されます

最初の記事のパラメーターOperationIdのソリューションを次のように実装しました-かみそりコンポーネントのコード:

using Microsoft.JSInterop;

[Inject]
protected IJSRuntime jrt { get; set; }

protected async override Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        try
        {
            var oid = await jrt.InvokeAsync<string>("GetOperationId");
            int opid;
            if (int.TryParse(oid, out opid))
                OperationId = opid;
        }
        catch (Exception ex)
        {
            ls?.LogException(ex, "Sortiment.OnAfterRenderAsync");
        }
        //This code was moved from OnInitializedAsync which executes without parameter value
        if (OperationId.HasValue)
            sortiment = await ProductService.GetSortimentAsync(null, OperationId, Odpady);
        else
            productFilter = await ProductService.GetProductFilterAsync();
        StateHasChanged(); //Necessary, because the StateHasChanged does not fire automatically here
    }
}

これをホスティングのRazorページに追加しました:

@section Header
{
  <script>
  function GetOperationId() {
    return "@Model.OperationId";
  }
  </script>
}

この回避策はRenderMode.Serverでのみ機能します。

2
Vojtěch Dohnal

RenderModeを静的に設定

@(await Html.RenderComponentAsync<Rateplan>(RenderMode.Static, new { id = 100 }))
0
Alexey Belanov