Comment puis-je passer le paramètre dans le composant de rasoir?
Jusqu'à présent, j'ai essayé
@(await Html.RenderComponentAsync<Rateplan>(RenderMode.ServerPrerendered, new { id= 100}))
Mais je reçois une erreur
InvalidOperationException: les composants de serveur de pré-rendu avec des paramètres ne sont pas pris en charge.
J'essaie la même chose avec RenderMode.ServerPrerendered mais je reçois une erreur
InvalidOperationException: les composants serveur avec paramètres ne sont pas pris en charge.
J'ai aussi essayé de faire
<Rateplan Id="100"></Rateplan>
mais cela n'a même pas démarré le composant.
Dans le composant où vous souhaitez accepter le paramètre, vous devez avoir une propriété marquée comme paramètre
Comme
[Parameter]
public List<Player> Players { get; set; }
Ensuite, vous devriez pouvoir passer le paramètre comme
<Componentname param-Players="@players"></Componentname>
(Dans cet exemple, @players est une variable locale)
Le problème et la solution de contournement sont décrits dans cet article . (Il y a un petit bogue, car GetModel
devrait être nommé GetCustomerId
) La transmission des paramètres n'est pas prise en charge, exactement comme le dit l'exception.
Vous pouvez attendre ASP.NET Core 3.1, où la capacité de passer des paramètres sera restaurée .
J'ai implémenté la solution du premier article pour le paramètre OperationId
comme ceci - le code du composant rasoir:
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
}
}
et l'a ajouté à la page d'hébergement Razor:
@section Header
{
<script>
function GetOperationId() {
return "@Model.OperationId";
}
</script>
}
Cette solution de contournement ne fonctionne que pour RenderMode.Server
.
Définir RenderMode comme statique
@(await Html.RenderComponentAsync<Rateplan>(RenderMode.Static, new { id = 100 }))