在aspx页面中查找文字

本文关键字:查找 文字 aspx | 更新日期: 2023-09-27 17:49:36

我有42个文字在我的网页和他们的id像ltr1,ltr2,…,ltr41,ltr42。我想在for循环中改变它们的文本属性。

下面是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
}

我该怎么做?

在aspx页面中查找文字

您可以使用OfType加载集合中的所有文字,然后您可以修改它们的文本属性。

var literals = this.Page.Controls.OfType<Literal>();
foreach (Literal literal in literals)
{
    literal.Text = "Your Text";
}
编辑:

由于在页面上的另一个控件中有一个控件,因此需要对控件进行嵌套搜索。您可以尝试以下扩展方法。摘自这篇文章。

首先为扩展方法创建一个类:

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";
    }
}

当您使用母版页时,您的控件没有直接从page . findcontrol()方法获得。所以你需要从asp:ContentPlaceHolder id中找到控件。

主页:

<asp:ContentPlaceHolder ID="cphContent" runat="server" />

aspx Page:

<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";
}

Page.FindControl()方法呢?

for(int i=1;i<43;i++)
{
    Literal li = (Literal)Page.FindControl("ltr"+i);
    li.Text="something";
}

您需要对页面上的控件进行递归查找。.net默认不这样做。

在这里阅读更多关于递归FindControl的信息

你可以这样做,像这样在顶部换行:

    <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);
        }