错误帮助::找到具有相同ID“ctl00”的多个控件。 FindControl要求控件具有唯一ID

时间:2010-12-16 10:24:37

标签: c# asp.net

获取上述错误。 我希望Accordian的ID在每次绑定时都是唯一的。我在我的代码中动态添加了Accordian窗格..它不起作用: -

像这样: -

for(int i=0;i< dt.Rows.Count;i++)
{      

AccordionPane accp = new AccordionPane();
accp.ID = "accp" + i.ToString();
Accordion1.Panes.Add(accp);
Accordion1.DataSource = dt.DefaultView;
Accordion1.DataBind();
}

我希望Accordian的ID是唯一的。我怎样才能完成我想要的东西?

Aspx页面: -

<div id="div1" runat="server">
        <telerik:RadTabStrip ID="RadTabStrip1" runat="server" MultiPageID="RadMultiPage1" OnTabClick="RadTabStrip1_OnTabClick" ClickSelectedTab="true">
        </telerik:RadTabStrip>
<br /><br />
       <telerik:RadMultiPage ID="RadMultiPage1" runat="server" SelectedIndex="0">

       </telerik:RadMultiPage>

    </div>

          <cc1:Accordion ID="Accordion1" runat="server" FadeTransitions="true"  Visible="true" AutoSize="None"
                SelectedIndex="0" RequireOpenedPane="false"  TransitionDuration="250" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent" CssClass="toggler">
                <HeaderTemplate>

                    <b style="color: Black">

                        <%#Eval("Ques")%>
                    </b>

                </HeaderTemplate>


                <ContentTemplate>
                <p> <%#DataBinder.Eval(Container.DataItem, "QuesAns")%></p>

                </ContentTemplate>
            </cc1:Accordion>
            <br />

1 个答案:

答案 0 :(得分:2)

你不应该多次调用BindAccordion因为(我猜)这就是为什么你最终会得到具有相同ID的多个控件。

您在Page_LoadRadTabStrip1_OnTabClick都在调用它。我对您的代码的最佳猜测是,您应该只在Page_Load !IsPostBack时调用一次。

如果不起作用,请尝试以下操作:

protected void BindTabStrip()
{
    DataSet ds = GetDataSetForTabs();
    RadTabStrip1.AppendDataBoundItems = true;
    RadTabStrip1.DataSource = ds;
    RadTabStrip1.DataTextField = "QuesType";
    RadTabStrip1.DataValueField = "QuesTypeID";
    RadTabStrip1.DataBind();

    // Remove it accordian from the page before adding it to 
    // a new ControlCollection
    Page.Controls.Remove(Accordian1); 

    RadPageView pv = new RadPageView();
    pv.Controls.Add(Accordion1);

    RadMultiPage1.PageViews.Add(pv);
}