我正在更新一些循环遍历集合的旧代码,并根据对象中的值设置一些UI显示属性。
不幸的是,它是如此硬编码:
for (int i = 0 ; i < length; i++) // length is going to be 30+
{
// do some stuff
switch (i)
{
case 1:
lbl1.Text = myVariable;
break;
case 2:
lbl2.Text = myVariable;
break;
....
case 15:
lbl15.Text = myVariable;
break;
}
}
(不幸的是,我说它实际上每个案例还有5行我遗漏了,无论如何都做同样的事情)
现在,我可以将所有15个label
控件放在一个数组中,并且在for
循环中只执行if (i <= 15) lblArr[i].Text = myVariable;
,但我不想对此数组进行硬编码。如果我们添加更多标签,那么我们需要记住更新此功能。
所以,我试图找到一种方法来查找特定HTML元素中的所有控件,但我找不到.NET语言中的工作示例。
在winforms中我可以简单地迭代someControl.Controls
并找到合适的,但由于这些是HTML表格中的标签而不是转发器或类似的东西,我不知道如何找到它们。有什么想法吗?
答案 0 :(得分:1)
您可以使用FindControl方法:
for (int i = 0 ; i < length; i++)
{
Label ans = FindControl(string.Format("lbl{0}",i)) as Label ;
if (ans!=null) and.Text = myVariable
}
答案 1 :(得分:0)
jquery怎么样?它比.NET快得多。试一试...... :)
$(function () {
var myTableId = "yourTableId";
var yourReplacementText = "yourReplacementText";
var allSpansUnderYourTable = $('#' + myTableId).find('span');
$.each(allSpan, function (index, item) {
item.innerHTML = yourReplacementText;
});
});
答案 2 :(得分:0)
根据代码的复杂性,在页面加载时检索数据库行,将其设置为代码隐藏的属性(或将其数据放在页面上属性的对象中)可能更简洁,然后使用代码块绑定到它。您也可以通过这种方式摆脱所有<asp:Label>
元素。
e.g。
<table>
<tr>
<td><span><%: myObject.Property1 %></span></td>
</tr>
</table>
通过这种方式,您可以使所有绑定声明化,并且无需使用过程代码隐藏逻辑来循环和设置。