かみそりコンポーネントにパラメーターを渡すにはどうすればよいですか?
これまでに試しました
@(await Html.RenderComponentAsync<Rateplan>(RenderMode.ServerPrerendered, new { id= 100}))
しかし、私はエラーを受け取ります
InvalidOperationException:パラメータ付きのサーバーコンポーネントの事前レンダリングはサポートされていません。
RenderMode.ServerPrerenderedで同じことを試しましたが、エラーが表示されます
InvalidOperationException:パラメータを持つサーバーコンポーネントはサポートされていません。
私もやってみました
<Rateplan Id="100"></Rateplan>
しかし、それでもコンポーネントは起動しませんでした。
パラメータを受け入れるコンポーネントでは、プロパティをパラメータとしてマークする必要があります
お気に入り
[Parameter]
public List<Player> Players { get; set; }
その後、次のようにパラメータを渡すことができるはずです
<Componentname param-Players="@players"></Componentname>
(この例では、@ playersはローカル変数です)
問題と回避策について説明します この記事で 。 (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
でのみ機能します。
RenderModeを静的に設定
@(await Html.RenderComponentAsync<Rateplan>(RenderMode.Static, new { id = 100 }))