[英]How to use string.Format for @ref
我的真实代码中有很多下拉项。 下面显示了一个示例。 我正在重写代码以减少行数,以便于阅读和维护。
请查看第一部分中的旧工作代码和我尝试过的新代码(在底部);
旧代码:
@if (Item.Contains("One"))
{
<li class="dropdown-item">
<button @ref="_btn1Ref" class="Scale" id="0" @onclick=OpenDialog1>Current</button>
</li>
<li class="dropdown-item">
<button @ref="_btn2Ref" class="Scale" id="1" @onclick=OpenDialog2>UpHole Voltage</button>
</li>
}
@if (Item.Contains("Two"))
{
<li class="dropdown-item">
<button @ref="_btn4Ref" class="Scale" id="3" @onclick=OpenDialog4>Head Tension</button>
</li>
<li class="dropdown-item">
<button @ref="_btn5Ref" class="Scale" id="4" @onclick=OpenDialog5>Head Tension Temp</button>
</li>
}
新鳕鱼 - 根据建议添加:
List<string> name = new List<string>
{"nothing", "one", "two", "three", "four"};
List<string> btnReference = new List<string>
{"nothing", "_btn1Ref", "_btn2Ref", "_btn3Ref",
"_btn4Ref"
};
List<string> openDialog = new List<string>
{"nothing", "OpenDialog1", "OpenDialog2", "OpenDialog3",
"OpenDialog4"
};
@for (var i = 1; i < 5; i++)
{
bool isAvailable = false;
if (!isAvailable && NavItem.Contains("PH1"))
isAvailable = i >= 1 && i <= 2;
if (!isAvailable && NavItem.Contains("PH2"))
isAvailable = i >= 3 && i <= 4;
if (isAvailable)
{
<li class="dropdown-item">
<button ref="@btnReference[i]" class="Scale" id="@i-1" onclick=@openDialog[i]>@tools[i]</button>
</li>
}
}
任何人都可以指导我如何重写上面的行。 谢谢你。
您可以将引用存储在列表中并以这种方式使用它们:
@inject IJSRuntime JSRuntime
@for(int i=0; i < btnReferences.Count; i++)
{
var iCopy = i;
<button @ref="btnReferences[iCopy]" @onclick="(async () => await TestRef(iCopy))"></button>
}
@code{
private List<ElementReference> btnReferences = new List<ElementReference>();
protected override async Task OnInitializedAsync()
{
for(int i = 0; i < 5; i++)
{
btnReferences.Add(new ElementReference());
}
}
public async Task TestRef(int i)
{
await JSRuntime.InvokeVoidAsync("console.log", testref[i].Id);
}
}
正如 Brian 已经说过的,@ ElementReference
@ref
或组件类型): string
不是有效类型。 @onclick
遇到同样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.