我试图在转发器中控制一个以保持状态的问题。
我有一个自定义控件(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;
,背后的代码是
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);
}
}
对我遗失或做错的任何想法?简单的选择看起来像找到另一种方式来引用占位符而不使用“找到控制”,但我担心最好能够掩盖基础问题,并且可能还没有其他选项。