在asp.net中维护转发器中的控件状态

时间:2016-03-07 17:39:37

标签: c# asp.net repeater findcontrol dynamic-controls

我试图在转发器中控制一个以保持状态的问题。

我有一个自定义控件(KPIbtn),它基本上是一个4位切换,我需要在回发之间保持值。

该值基于数据表。

为了启动并运行此界面,我在转发器的占位符中动态创建了KPIbtn。

这一切都正常,直到我向转发器添加另一个字段(StuName)。 使用回发中的额外字段我收到错误:

  

具有相同ID的多个控件' StuName'被找到。 FindControl要求控件具有唯一ID。

删除字段 - 没有问题,有字段,但没有动态控件创建,没有问题。两者 - 出现错误。

页面的转发器部分看起来像......



  <asp:Repeater ID="Repeater1" runat="server"  OnItemCreated="Repeater1_ItemCreated" OnItemDataBound="Repeater1_ItemDataBound">
                <ItemTemplate>
         <div>
             <asp:Label ID="StuName" runat="server" Text='<%#Eval("StuID") %>'></asp:Label>
               <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
         </div>
     </ItemTemplate>
        </asp:Repeater> 
&#13;
&#13;
&#13;

,背后的代码是

protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
        if (Page.IsPostBack)
        {
            DTable = ViewState["DTable"] as DataTable;
        }

        foreach (DataColumn dc in DTable.Columns)
        {
            KPIbtn btn = new KPIbtn();
            btn.ID = dc.ColumnName;
            btn.KPIID = dc.ColumnName;
            btn.StuID = "test";

            PlaceHolder rep = e.Item.FindControl("PlaceHolder2") as PlaceHolder;
            rep.Controls.Add(btn);
        }
}

对我遗失或做错的任何想法?简单的选择看起来像找到另一种方式来引用占位符而不使用“找到控制”,但我担心最好能够掩盖基础问题,并且可能还没有其他选项。

0 个答案:

没有答案