是否将组件保存在列表或数组中



我有一个index.razor,它有一个for循环,可以生成100个组件(这些显示文本和更多的vlaue(,现在我想对每个组件都有一个引用,有没有办法将它们保存在列表或数组中?

我自己尝试了很多方法,但我得到了html中显示的组件名称。

addPdfComp由一个按钮执行:

public void addPdfComp(int type)
{
var newComponent = new PdfComp();
newComponent.text = "some test text";
PdfComponentsList.Add(newComponent);
}

并显示组件:

@foreach (var comp in PdfComponentsList)
{
<div>@comp</div>
}

结果:见结果

编辑:组件本身:

<div class="row p-1 " style="border:solid; ">
<h5>TextComponent</h5>
<div>
<label>X</label>
<input type="number" class="col-2" @bind-value="_x"/>
<label>Y</label>
<input type="number" class="col-2" @bind-value="_y"/>
<label>Text</label>
<input type="text" class="col-4" @bind-value="text" />
</div>
@code {
[Parameter]
public string text { get; set;  } = "Missing text";
[Parameter]
public string type { get; set; } = "noone";
[Parameter]
public int _x { get; set; } = 0;
[Parameter]
public int _y { get; set; } = 0;
}

对象的默认字符串表示是该对象的完全限定类名,这就是您所看到的。这意味着无论PdfComp是什么,它都没有一个有意义的.ToString()实现。

这就是Razor语法在这种情况下真正做到的,它只是将输出作为字符串发出。所以@something基本上将something作为字符串求值,并将其写入输出。

基于以上评论:

我的意图是[…]显示组件本身,就好像我刚刚键入了100次:<PdfComp></PdfComp>一样。

C#代码中PdfComp的实例与标记中<PdfComp></PdfComp>的实例不同。(尽管我认为它们在框架深处的某个地方非常类似。(您想要的不是对象实例列表,而是视图渲染标记所需的数据列表。

因此,在结构上,更像这样:

// PdfComponentsList here is a list of strings
PdfComponentsList.Add("some test text");

然后在标记中循环显示元素:

@foreach (var pdf in PdfComponentsList)
{
<PdfComp text="@pdf"></PdfComp>
}

您也可以使PdfComponentsList成为一个包含多个属性的对象列表,例如:

PdfComponentsList.Add(new SomeObject { Text = "some test text" });

在标记中:

@foreach (var pdf in PdfComponentsList)
{
<PdfComp text="@pdf.Text"></PdfComp>
}

相关内容

  • 没有找到相关文章

最新更新