【问题标题】:How to access a legend tag from code如何从代码访问图例标签
【发布时间】:2012-11-21 04:07:47
【问题描述】:

我有以下数据绑定repeater 代码:

<%--categories--%>
<asp:Repeater ID="CategoryRepeater" runat="server" OnItemDataBound="ItemBound">
    <ItemTemplate>
        <div class="groupbox">
            <fieldset>
                <legend><%# Container.DataItem %></legend>
                <table>
                    <asp:Repeater ID="ItemRepeater" runat="server">
                    <ItemTemplate>
                        <tr>
                        <td>
                            <asp:CheckBox id="chkItem" runat="server" Text='<%# Eval("Text")%>' />
                            <asp:HiddenField id="pgNos" runat="server" Value='<%# Eval("PGNos")%>' />
                            <asp:Button ID="btnXRefs" Text="x-refs" runat="server" CssClass="xRefButton" OnClick="btnSelectXRefs_Click" />
                        </td>
                        </tr>
                    </ItemTemplate>
                    </asp:Repeater>
                </table>
            </fieldset>
        </div>
    </ItemTemplate>
</asp:Repeater>

repeater 中有一个repeater。如何从代码中访问legend (&lt;legend&gt;&lt;%# Container.DataItem %&gt;&lt;/legend&gt;) 中的文本?

我试过了:

foreach (RepeaterItem cr in CategoryRepeater.Items)
{
string heading = (string) cr.DataItem; // returns null
}

【问题讨论】:

标签: c# asp.net html webforms repeater


【解决方案1】:

Container.DataItem 是绑定列表中此特定项目的 DataItem 的运行时别名。对于显示 10 行数据的 Repeater,这是数据源中的一行...基本上,它是特定行,在运行时您可以从该行获取属性值

我看到了你上面的标记...好像你没有提到数据绑定类型的属性,如下所示。

<%# ((Your Class Name)Container.DataItem).Class Property Name %>

中继器内部有一个中继器。如何访问里面的文字 代码中的图例 ()?

phemt.latd 所说,您可以将 Legend 标签 更改为服务器端控件,如下所示。

<legend id="lg" runat="server">
      <%# ((Your Class Name)Container.DataItem).Class Property Name %>
</legend>

现在,在 Item-Bound 数据事件中,找到图例控件。

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
                           e.Item.ItemType == ListItemType.AlternatingItem)
    {
        HtmlGenericControl ctl = (HtmlGenericControl)e.Item.FindControl("lg");
        ctl.InnerText //This is what will give you the result.
    }
}

【讨论】:

    【解决方案2】:

    您使用的图例标签在服务器端不可见。是客户端控件而不是服务器控件。

    试试这个:

    <legend id="myLegend" runat="server"><%# Container.DataItem %></legend>
    

    然后在代码隐藏中:

    protected void ItemBound(Object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.DataItem == null) return;
            HtmlGenerics body = (HtmlGenerics)e.Item.FindControl("myLegend");
            body.InnerText = "Foo";
        }
    

    【讨论】:

    • 我做了 -- var fileName = ((HtmlGenericControl) cr.FindControl("heading")).InnerText;
    猜你喜欢
    • 2012-09-10
    • 2011-12-21
    • 2011-09-17
    • 2011-03-24
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多