根据字符串访问特定标签

时间:2013-06-20 13:49:03

标签: c# asp.net

如果我在ASP.NET页面上有10个标签,有没有办法可以编程方式选择一个基于值设置的标签?

<asp:Label runat="server" ID="errormsgLbl1" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl2" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl3" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl4" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl5" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl6" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl7" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl8" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl9" CssClass="errorMessage"/>
<asp:Label runat="server" ID="errormsgLbl10" CssClass="errorMessage"/>

然后在我的代码隐藏

var labeltochange = "errormsgLbl1";
.
. Magic here
.
labeltochange.text = "message";

4 个答案:

答案 0 :(得分:5)

使用Control.FindControl方法:

var labeltochange = "errormsgLbl1";
Label label = (Label)this.FindControl(labeltochange);
label.Text = "message";

有关详细信息,请参阅How to: Access Server Controls By ID

答案 1 :(得分:2)

我认为为什么你首先使用字符串引用,使用强类型引用会更好的编码实践。

Label labeltochange;

if (some logic..){
  labeltochange = errormsgLbl1;
}
else (some other logic..){
  labeltochange = errormsgLbl2;
}
labeltochange.Text = "message";

FindControl可以使用,但如果您更改标记中的ID而不更新逻辑后面的代码,则会得到空引用异常。

然而,控件本身引用它们将完全阻止编译。

答案 2 :(得分:2)

使用FindControl

  

在当前命名容器中搜索具有指定id参数的服务器控件。   使用它来访问另一个容器内的控件,或者在调用者无法直接访问目标控件的其他情况下。

你走了:

var labeltochange = "errormsgLbl1";

// Find control on page.
Label lbl = (Label)FindControl(labeltochange);  // Magic

lbl.Text = "message";

答案 3 :(得分:1)

您可以使用FindControl方法。所以你的代码看起来会更像这样:

Label labeltochange =(Label)tab.FindControl("errormsgLbl"+i);