如果我在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";
答案 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);