1

如果我在 ASP.NET 页面上有 10 个标签,有没有一种方法可以通过编程方式根据值选择要设置的标签之一?

IE

<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

4 回答 4

5

使用Control.FindControl方法:

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

有关How to: Access Server Controls By ID更多信息,请参阅。

于 2013-06-20T13:51:01.390 回答
2

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

Label labeltochange;

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

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

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

于 2013-06-20T13:53:58.777 回答
2

使用FindControl

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

干得好:

var labeltochange = "errormsgLbl1";

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

lbl.Text = "message";
于 2013-06-20T13:54:30.827 回答
1

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

Label labeltochange =(Label)tab.FindControl("errormsgLbl"+i); 
于 2013-06-20T13:52:31.947 回答