在 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 中引用动态创建的控件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用同一 Blazor 组件的多个实例

怎么样在MFC中创建动态控件

实现简单的Blazor低代码

为 Blazor 授权动态添加策略声明

我动态创建了一个canvas,上面动态创建了一些控件,我现在想使用这些控件,该怎么弄

WPF 中动态创建和删除控件