8 votes

Est-il possible de spécifier deux types différents de valeurs param pour les composants parent et enfant dans Blazor ?

Veuillez vous référer aux blocs de code suivants. Pour ces blocs de code, j'ai essayé d'accéder aux valeurs du composant parent dans le composant enfant, mais cela renvoie toujours la valeur null dans le composant enfant.

<Parent TValue="TreeData">
 <Child TValue="TreeNode<TreeData>"></Child>
</Parent>

@code {
    public class TreeData
    {
        public string Value { get; set; }
    }
    public class TreeNode<TreeData>
    {
        public int Count { get; set; }
    }
}

**Parent Component:**

<CascadingValue Value="@this">
    @ChildContent
</CascadingValue>

**Child Component:** 

@code {
    [CascadingParameter]
    private Parent<TValue> ParentObj { get; set; }
    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        //Parent obj always returns the null value
        ParentObj?.UpdateChildProperties("UpdateData", this);
    }    
}

0voto

Kyle Cintron Points 96

Quelques éléments généraux à prendre en compte :

  1. Assurez-vous que votre composant enfant (ou votre _Imports.razor) comporte une déclaration d'utilisation pour cet espace de noms.
  2. Le [CascadingParameter] de l'enfant doit être public.
  3. Faire du type du [CascadingParameter] le nom du parent (sans le .razor)
  4. Si vous avez plusieurs types différents que vous voulez passer en tant que paramètre en cascade, c'est très bien, il suffit de créer un autre [CascadingParameter] dans l'enfant.
  5. S'ils doivent utiliser le même [CascadingParameter] dans le composant enfant, tous les types transmis doivent hériter de la même classe (.razor). Ce .razor peut être vide, il suffit d'inclure @inherits (quel que soit votre type de base) et de faire en sorte que le type du [CascadingParameter] dans le composant enfant soit le type de la base et que, lors de l'initialisation, vous puissiez vérifier le type et le convertir si nécessaire.

Je pense que ces mesures devraient résoudre le problème, mais comme Curtis l'a mentionné dans le commentaire, il est difficile de suivre ce code de la manière dont il est séparé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X