在 Blazor 中引用动态创建的控件
Posted
技术标签:
【中文标题】在 Blazor 中引用动态创建的控件【英文标题】:referencing dynamically created controls in Blazor 【发布时间】:2021-12-15 14:55:27 【问题描述】:我创建了一个带有我自己的控件的 Razor 类库。我现在在我的 Blazor 服务器应用程序中使用这个库。我在 for 循环中动态地在 html 代码上添加控件。但是,一旦添加了控件,我如何在我的应用程序代码中引用这些控件?我不认为我可以为每个控件添加引用,因为添加的控件数量可能会发生变化。这是我的代码示例:
<div class="col-12">
@foreach (MyModel new_control_model in p.list_of_control_models)
<myCustomControl model = "new_control_model"></myCustomControl >
</div>
将控件添加到我的页面后,我希望能够引用这些控件。但是怎么做?有没有办法在将控件添加到网页时将它们添加到列表中?或者其他方式来引用它们?例如:
@code
private void GetValues()
//iterate over all myCustomControl on the page and call a method from the control
谢谢 杰森
【问题讨论】:
通过引用获得它们后,您想做什么?我想说有一种比维护对这个组件的引用列表更简单的方法。让我知道,以便我可以就您的要求或更简单的替代方案回复您。 你好。我正在向我的页面动态添加 Razor 控件列表(大约 30 个左右)。因为作为开发人员,我可以根据用户的要求添加更多控件,所以我需要能够轻松添加新控件。必须创建控件可以引用的 30 多个变量似乎是个坏主意。你有更好的选择吗? 【参考方案1】:我不确定这是如何工作的。我认为它是通过引用添加的。但是,如果我这样做:
<div class="col-12">
@foreach (MyModel new_control_model in p.list_of_control_models)
//include adding a reference to a dictionary
<myCustomControl @ref="myComponents[new_control_model.id]" model = "new_control_model"></myCustomControl >
</div>
@code
//by reference I assume, the control gets added to this dictionary
private Dictionary<string, myCustomControl > myComponents = new Dictionary<string, myCustomControl >();
private void ButtonPress()
foreach (var item in myComponents)
string id = item.Key;
object myObject = item.Value;
string output = "";
if (myObject.GetType().FullName == "MyComponentLibrary.myCustomControl ")
myCustomControl myControl = (myCustomControl )myObject;
output = myControl.GetControlValue();
【讨论】:
为什么要降价?有更好的解决方案吗?以上是关于在 Blazor 中引用动态创建的控件的主要内容,如果未能解决你的问题,请参考以下文章