如何在HTML表中获取所有<asp:label>控件?

时间:2015-09-23 20:36:25

标签: c# asp.net

我正在更新一些循环遍历集合的旧代码,并根据对象中的值设置一些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表格中的标签而不是转发器或类似的东西,我不知道如何找到它们。有什么想法吗?

3 个答案:

答案 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>

通过这种方式,您可以使所有绑定声明化,并且无需使用过程代码隐藏逻辑来循环和设置。