Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在blazor中渲染之前,将一些数据从子组件发送到父组件_C#_Blazor - Fatal编程技术网

C# 在blazor中渲染之前,将一些数据从子组件发送到父组件

C# 在blazor中渲染之前,将一些数据从子组件发送到父组件,c#,blazor,C#,Blazor,我正在尝试创建一个ChildComponent,在ParentComponent呈现自己之前将一些数据发送到ParentComponent。 首先,我尝试向所有ChildComponent发送父级引用,然后尝试使用参数值直接从Childs设置ParentComponent中的easy文本。 有人能告诉我为什么我们不工作吗? 谢谢大家的帮助 主文件: @page "/test" <h3>TestTabeli</h3> <ParentCompone

我正在尝试创建一个ChildComponent,在ParentComponent呈现自己之前将一些数据发送到ParentComponent。 首先,我尝试向所有ChildComponent发送父级引用,然后尝试使用参数值直接从Childs设置ParentComponent中的easy文本。 有人能告诉我为什么我们不工作吗? 谢谢大家的帮助

主文件:

@page "/test"

<h3>TestTabeli</h3>
<ParentComponent>
    <ChildComponent Name="Child nr 1" />
    <ChildComponent Name="Child nr 2" />
</ParentComponent>
@page”/test
TestTabeli
父文件:

<h3>ParentComponent</h3>

<CascadingValue Value="Parent" Name="ParentRef">
    @body
</CascadingValue>

<br />
<p>My Childrens: @text</p>

@code {
    public string text { get; set; } = "blaaaa";
    public ParentComponent Parent { get; set; }

    protected override void OnInitialized()
        {
        base.OnInitialized();
        Parent = this;
        }
    public RenderFragment body { get; set; }

    }
父组件 @身体
我的孩子们:@text

@代码{ 公共字符串文本{get;set;}=“blaaaa”; 公共ParentComponent父级{get;set;} 受保护的覆盖无效OnInitialized() { base.OnInitialized(); 父=此; } 公共RenderFragment主体{get;set;} } 子组件:

<h3>ChildComponent</h3>

@code {
    [Parameter]
    public string Name { get; set; } = "Child Name";

    [CascadingParameter(Name = "ParentRef")]
    public ParentComponent parent { get; set; }

    protected override void OnParametersSet()
        {
        base.OnParametersSet();
        parent.text += "<br /> Hi! My name is: " + Name;
            
        }

    }
ChildComponent
@代码{
[参数]
公共字符串名称{get;set;}=“子名称”;
[CascadingParameter(Name=“ParentRef”)]
公共ParentComponent父级{get;set;}
受保护的覆盖无效OnParametersSet()
{
base.OnParametersSet();
parent.text+=“
嗨!我的名字是:”+name; } }
不能直接在parentcomponent内部渲染子组件。相反,您需要使用模板参数,通过指定一个或多个RenderFragment或RenderFragment类型的组件参数来定义模板化组件。渲染片段表示要渲染的UI段。RenderFragment接受一个类型参数,可以在调用呈现片段时指定该参数。大概是这样的:

@typeparam TItem

    @foreach (var item in Items)
    {
       @ChildTemplate(item)
    }
@代码{

[Parameter]
public RenderFragment<TItem> ChildTemplate { get; set; }

[Parameter]
public IReadOnlyList<TItem> Items { get; set; }
[参数]
公共RenderFragment子模板{get;set;}
[参数]
公共IReadOnlyList项{get;set;}
}

可以使用与参数名称匹配的子元素指定模板参数。 看看

创建一个ChildComponent,将一些数据发送到ParentComponent,然后再发送到ParentComponent 会自己出现的

这是不可能的。女人在出生前能不能生孩子。但你稍后会看到,我们可以欺骗人类的眼睛相信这是可能的。但是你的问题是为什么你的代码不起作用,对吗

<CascadingValue Value="Parent" Name="ParentRef">
    @body
</CascadingValue>
请注意,必须添加[Parameter]属性

对代码进行一些附加更改后,它可能会起作用:

剃须刀
@page”/ParentComponent
父组件
@儿童内容

我的孩子们:@text

@代码{ 公共字符串文本{get;set;}=“blaaaa”; //公共ParentComponent父级{get;set;} 受保护的覆盖无效OnInitialized() { base.OnInitialized(); //父=此; } [参数] 公共RenderFragment ChildContent{get;set;} }
儿童剃须刀
@Name
@代码{
[参数]
公共字符串名称{get;set;}=“子名称”;
[CascadingParameter(Name=“ParentRef”)]
公共ParentComponent父级{get;set;}
受保护的覆盖无效OnParametersSet()
{
parent.text+=“嗨!我的名字是:”+name;
}
}
复制并运行该代码。请注意,“文本”属性中的文本不会更改。它将始终显示字符串“blaaaa”。解决方法是使用EventCallback将新值传递给Text属性,并重新呈现父组件

一般来说,使用CascadingValue组件是不合适的。并且不应将对父组件的引用传递给子组件。您通常应该使用组件参数和事件(EventCallback“delegate”)来处理父级和子级之间的关系

[Parameter]
public RenderFragment ChildContent { get; set; }
@page "/ParentComponent"

<h3>ParentComponent</h3>

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

<br />
<p>My Childrens: @text</p>

@code {
    public string text { get; set; } = "blaaaa";
  //  public ParentComponent Parent { get; set; }

    protected override void OnInitialized()
    {
        base.OnInitialized();
      //  Parent = this;
    }
    [Parameter]
    public RenderFragment ChildContent { get; set; }

}
<h3>@Name</h3>

@code {
    [Parameter]
    public string Name { get; set; } = "Child Name";

    [CascadingParameter(Name = "ParentRef")]
    public ParentComponent parent { get; set; }

    protected override void OnParametersSet()
    {
         parent.text += "Hi! My name is: " + Name;

    }
}