您好,感谢您抽出宝贵时间阅读本文档。

当我选择RadioButton时,我试图更改位于Repeater内部的面板的CSS类。

<div>
    <asp:RadioButtonList OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged" AutoPostBack="true" ID="RadioButtonList1" RepeatDirection="Horizontal" runat="server">
        <asp:ListItem Selected="True">Show Gallery</asp:ListItem>
        <asp:ListItem>Show List</asp:ListItem>
    </asp:RadioButtonList>
</div>
<div class="RpOutterFrame" runat="server" id="RpOutterFrame">
    <asp:Repeater runat="server" ID="RP">
        <ItemTemplate>
            <panel class="ShowDiv" runat="server" id="RpInnerFrame">
                <img runat="server" style="width: 80px;" id="ModelImg" class="ModelImg" src='<%# string.Format("~/Content/Img/ModelImg/{0}", Eval("Image")) %>' />
                <br />
                <%# Eval("Model") %>
            </panel>
        </ItemTemplate>
    </asp:Repeater>
</div>


我的C#:

protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{

    if (RadioButtonList1.Items[0].Selected == true)
    {

        RpOutterFrame.Attributes["class"] = "RpOutterFrame";

        Panel panel = (Panel)this.FindControl("RpInnerFrame");
        panel.CssClass = "ShowDiv2";
    }

}


如您所见,面板已经具有ShowDiv类,然后我希望在选择/单击单选按钮时将其更改为ShowDiv2。

任何人都可以帮助我弄清楚我在做什么错或修复代码?

最佳答案

Repeater的目的是重复某些内容。因此,通常它包含多个元素。因此,RepeaterItemNamingContainer,它必须包含unueue ID,并且可以在其中通过FindControl(ID)找到控件。

所以这不起作用,因为thisPage而不是NamingContainerPanel

Panel panel = (Panel)this.FindControl("RpInnerFrame");
panel.CssClass = "ShowDiv2";


您必须循环所有项目:

foreach(RepeaterItem item in RP.Items)
{
    Panel panel = (Panel)item.FindControl("RpInnerFrame");
    panel.CssClass = "ShowDiv2";
}


除此之外,您应该使用ASP:Panel而不是Panel

所以改变

<panel class="ShowDiv" runat="server" id="RpInnerFrame">
    // ...
</panel>




<ASP:Panel CssClass="ShowDiv" runat="server" id="RpInnerFrame">
    // ...
</ASP:Panel>

关于c# - 更改位于Asp:repeater内的面板上的CSS类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23269817/

10-09 05:36