0

Web ページには 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
}

これどうやってするの?

4

5 に答える 5

4

を使用してコレクション内のすべてのリテラルをロードOfTypeでき、後でそれらの text プロパティを変更できます。

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";
    }
}
于 2012-12-26T07:40:54.853 に答える
1

マスターページを使用しているときに、コントロールが Page.FindControl() メソッドから直接取得されませんでした。そのため、asp:ContentPlaceHolder ID からコントロールを見つけるには、1 レベル深くする必要があります。

マスター ページ:

<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";
}
于 2012-12-26T10:35:29.537 に答える
0

ページ上のコントロールを再帰的に検索する必要があります。パフォーマンスにより、.netはデフォルトでこれを行いません。

再帰的な FindControl の詳細については、こちらをご覧ください

于 2012-12-26T09:17:54.913 に答える
0

これを行うには、次のようにトップ レベルで a をラップします。

    <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);
        }
于 2012-12-26T10:00:57.847 に答える