我在一个页面上有多个文字。例如,
<asp:Literal id="Label1" runat="server" />
我在一页上大约有 10 个,并且想用相同的值填充它们。有没有一种好方法可以在不引用每个控件的 id 的情况下做到这一点?
创建一个公共属性来保存您要显示的值并在 aspx 中使用
<%= propertyName %>
任何你想显示值的地方。
如果您正在使用资源文件,则可以将所有 10 个资源文件的 meta:resourcekey 属性设置为相同的值。
我看到它完成的唯一方法是使 id 成为一个可循环的名称(例如 Label1 - Label10)并循环引用 id。但是我们并没有为不同的解决方案而努力!
文字是位于单个容器(例如,面板)中还是散落在页面上?如果它们位于不包含太多其他不相关控件的单个容器中,那么它就像循环遍历容器的控件集合一样简单。
是的,我很清楚 Page 也是一个容器,但是循环访问 Page 中的所有控件几乎总是非常低效的。我根本不会推荐它。
您的标签是如何命名的。如果他们有像 Label1 - Label10 这样的通用命名约定,那么您可以这样做
for(int i = 1; i <= 10; i++)
{
Literal l = Page.FindControl(string.Format("Label{0}", i)) as Literal
if(l != null)
l.Text = "Whatever";
}
如果它们的名称不同,您可以将标签名称粘贴在一个数组中并循环遍历该数组,而不是使用 10 个显式.Text =
语句。例如
string [] litNames = new string [] { "litFirst", "otherLit", "someOtherVar" }
foreach(string s in litNames)
{
Literal l = Page.FindControl(s) as Literal
if(l != null)
l.Text = "Whatever";
}