1

这是我的 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

4

1 回答 1

1

看起来您正在事件处理程序期间动态创建标签对象。

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

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

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

于 2009-08-11T06:35:25.987 回答