【发布时间】:2020-04-10 09:38:47
【问题描述】:
我有两个组件,Child.razor 和 Parent.razor。
Child.razorHTML:
<input type="text" value="@Text" />
Child.razorC#:
[Parameter] public string Text { get; set; }
还有Parent.razor HTML:
<Child @ref="child_1" />
<Child @ref="child_2" />
<Child @ref="child_3" />
Parent.razorC#:
Child child_1;
Child child_2;
Child child_3;
void SetText(Child item, string text)
{
item.Text = text;
}
我在item.Text = text 收到警告:
警告 BL0005:不应在其组件之外设置组件参数“文本”。
经过一番谷歌搜索,我发现了这个问题:BL0005 - external parameter usage - why is a warning for that?
答案很好,但没有提供替代方案(github上的链接内容也不是很有帮助)。
从父组件改变组件参数的正确方法是什么?
编辑
再澄清一点:我知道我可以使用绑定,但我需要能够更改 SetText 方法中的值,将我想要变异的 Child 作为参数传递。绑定的问题是变量没有与组件绑定。换句话说:对于 Child 的引用,我不知道应该设置哪个绑定字符串。
例如:
<Child @ref="child_1" @Text="binding_1" />
<Child @ref="child_2" @Text="binding_2"/>
<Child @ref="child_3" @Text="binding_3"/>
Parent.razorC#:
Child child_1;
Child child_2;
Child child_3;
string binding_1;
string binding_2;
string binding_3;
void SetText(Child item, string text)
{
// which binding string should I set?
}
我可以可视化一些时髦的代码,创建一个Dictionary<Child, string> 以将组件与绑定字符串相关联,或者类似的东西,但是......真的吗?
【问题讨论】:
-
嗯,我认为这很明显。
<Child @ref="child_1" @Text="ParentSth" />然后修改ParentSth属性 -
@Eldar 在我的示例中,如何在 SetText 方法中使用绑定?
-
抱歉,我在第一次评论时错过了绑定部分。您可以像这样将您的 parentProperty 绑定到子参数:
<Child @ref="child_1" @bind-Text="ParentSth" />并且当您更改父项中的ParentSth属性时,它将反映给子项。 -
@Eldar 感谢您的评论。请看我的编辑
标签: c# asp.net-core razor blazor