这是我的HTML
<asp:UpdatePanel runat="server" ID="panel1" UpdateMode="Conditional">
<ContentTemplate>
<asp:FormView runat="server" ID="formViewUno" DataSourceID="odsBob" DefaultMode="Insert">
<InsertItemTemplate>
<span>Name:</span>
<asp:Literal ID="Literal4" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxName" Text='<%# Bind("Name") %>' />
<br />
<span>Age:</span>
<asp:Literal ID="Literal5" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxAge" Text='<%# Bind("Age") %>' />
<br />
<span>City:</span>
<asp:Literal ID="Literal6" runat="server" Text=" " />
<asp:TextBox runat="server" ID="tbxCity" Text='<%# Bind("City") %>' />
<br />
<asp:Button ID="Button1" runat="server" CommandName="Insert" Text="Insert" />
</InsertItemTemplate>
</asp:FormView>
<asp:Panel runat="server" ID="msgs">
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
这是我的C#
private void odsBob_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
var p = e.ReturnValue as Person;
if (p != null)
{
var msg = new Label
{
Text =
String.Format("{0} [Age:{1}, City:{2}] was successfully added", p.Name, p.Age,
p.City)
};
var br = new LiteralControl { Text = "<br/>" };
msgs.Controls.Add(br);
msgs.Controls.Add(msg);
}
}
如何在标签控件中坚持(在插入后添加新的)?它正在被消灭。每次正确添加新添加的内容。如何保持控制集合的机智?谢谢你的帮助。
干杯, 〜CK
答案 0 :(得分:1)
看起来你在事件处理程序中动态创建了一个标签对象。
动态控件存在问题,因为需要在每次回发时重新创建它们。请记住,回发会创建一个新的Page对象实例 - 这意味着您添加到上一页的控件已经消失 - 您的Panel会在每次新请求时初始化为空,因此只会添加最新的文字/标签对。
一种解决方案可能是将所有必要的文本信息添加到Session中,让Panel从Prerender中的Session中生成动态标签和文字。
另一种解决方案会更复杂,但您可以让Panel在Init阶段动态添加标签和文字。如果您可以确保在Init期间以相同的顺序添加相同数量的控件,则将在每个PostBack上正确跟踪这些控件的ViewState。您基本上需要将最近添加的标签和文字存储到Session中,并让Panel在下一个请求中将其取出以确保它在Init期间重新添加。您还需要存储一个计数器,以便Panel知道在Init期间要添加多少组控件。