我的网页上有42个文字,其ID如ltr1,ltr2,...,ltr41,ltr42。我想在for循环中更改其text属性。
这里是html代码:
<table class="calendar">
<tr>
<td>
<div class="day">
<asp:Literal ID="day1" runat="server">
</asp:Literal></div>
</td>
</tr>
</table>
C#
for(int i=1;i<43;i++)
{
("ltr"+i).Text="something"; //I don't know which method I must use, so wrote like this
}
我该怎么做?
答案 0 :(得分:3)
您可以使用OfType
加载集合中的所有文字,稍后您可以修改其文本属性。
var literals = this.Page.Controls.OfType<Literal>();
foreach (Literal literal in literals)
{
literal.Text = "Your Text";
}
修改强>
由于您可以控制页面上的另一个控件,因此您需要对控件执行嵌套搜索。您可以尝试以下扩展方法。 Taken from this post。
首先为扩展方法创建一个类:
public static class ExtensionMethod
{
public static IEnumerable<Control> FindAll(this ControlCollection collection)
{
foreach (Control item in collection)
{
yield return item;
if (item.HasControls())
{
foreach (var subItem in item.Controls.FindAll())
{
yield return subItem;
}
}
}
}
public static IEnumerable<T> FindAll<T>(this ControlCollection collection) where T : Control
{
return collection.FindAll().OfType<T>();
}
}
稍后您可以像以下一样使用它:
protected void Button1_Click(object sender, EventArgs e)
{
var literals = this.Controls.FindAll<Literal>();
foreach (Literal literal in literals)
{
literal.Text = "Your Text";
}
}
答案 1 :(得分:1)
当您使用母版页时,您的控件没有直接从Page.FindControl()方法获得。所以你需要深入1级才能从asp找到控件:ContentPlaceHolder id。
母版页
<asp:ContentPlaceHolder ID="cphContent" runat="server" />
aspx页面
<asp:Content ID="Content2" ContentPlaceHolderID="cphContent" runat="server">
<asp:Literal ID="day1" runat="server"></asp:Literal>
</asp:Content>
aspx Page.cs:
var literals = Page.Master.FindControl("cphContent").Controls.OfType<Literal>();
foreach (Literal literal in literals)
{
literal.Text = "Your Text";
}
答案 2 :(得分:0)
Page.FindControl()方法怎么样?
for(int i=1;i<43;i++)
{
Literal li = (Literal)Page.FindControl("ltr"+i);
li.Text="something";
}
答案 3 :(得分:0)
您需要对页面上的控件进行递归查找。 通过性能.net默认情况下不要这样。
阅读有关Recursive FindControl here
的更多信息答案 4 :(得分:0)
你可以这样做,像这样包装在顶层:
<div id="Content" runat="Server">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td><asp:Literal ID="Literal1" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal2" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal3" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal4" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal5" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal6" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal7" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal8" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal9" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal10" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal11" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal12" runat="server"></asp:Literal></td>
<td><asp:Literal ID="Literal13" runat="server"></asp:Literal></td>
</tr>
</table>
</div>
你可以像这样编码:
for (int i = 1; i < 10; i++)
{
Literal li = (Literal)Content.FindControl("Literal"+i);
}