在FormView插入帮助后向Panel添加控件

时间:2009-08-11 06:31:30

标签: c# asp.net updatepanel objectdatasource

这是我的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="&nbsp;&nbsp;&nbsp;" />
                    <asp:TextBox runat="server" ID="tbxName" Text='<%# Bind("Name") %>' />
                    <br />
                    <span>Age:</span>
                    <asp:Literal ID="Literal5" runat="server" Text="&nbsp;&nbsp;&nbsp;" />
                    <asp:TextBox runat="server" ID="tbxAge" Text='<%# Bind("Age") %>' />
                    <br />
                    <span>City:</span>
                    <asp:Literal ID="Literal6" runat="server" Text="&nbsp;&nbsp;&nbsp;" />
                    <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

1 个答案:

答案 0 :(得分:1)

看起来你在事件处理程序中动态创建了一个标签对象。

动态控件存在问题,因为需要在每次回发时重新创建它们。请记住,回发会创建一个新的Page对象实例 - 这意味着您添加到上一页的控件已经消失 - 您的Panel会在每次新请求时初始化为空,因此只会添加最新的文字/标签对。

一种解决方案可能是将所有必要的文本信息添加到Session中,让Panel从Prerender中的Session中生成动态标签和文字。

另一种解决方案会更复杂,但您可以让Panel在Init阶段动态添加标签和文字。如果您可以确保在Init期间以相同的顺序添加相同数量的控件,则将在每个PostBack上正确跟踪这些控件的ViewState。您基本上需要将最近添加的标签和文字存储到Session中,并让Panel在下一个请求中将其取出以确保它在Init期间重新添加。您还需要存储一个计数器,以便Panel知道在Init期间要添加多少组控件。