Добавление элементов управления на панель после справки по вставке FormView - PullRequest
1 голос
/ 11 августа 2009

Вот мой 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);


            }

    }

Как мне сохранить (добавить новый после вставки) ярлык? Это стирается. Добавленный новый добавляется каждый раз правильно. Как я могу держать контрольную коллекцию в такте? Спасибо за любую помощь.

Ура, ~ Ск

1 Ответ

1 голос
/ 11 августа 2009

Похоже, вы динамически создаете объект метки во время обработчика события.

Динамические элементы управления проблематичны, потому что они должны быть воссозданы при каждой обратной передаче. Помните, что постбэк создает новый экземпляр вашего объекта Page - это означает, что элементы управления, добавленные на последнюю страницу, исчезли - ваша Panel инициализируется как пустая при каждом новом запросе, поэтому будет добавлена ​​только самая последняя пара литерал / метка.

Одним из решений может быть добавление всей необходимой текстовой информации в Session, и ваша Panel должна генерировать динамические метки и литералы из того, что находится в Session во время Prerender.

Другое решение было бы более сложным, но вы можете сделать так, чтобы Panel добавляла метки и литералы динамически на этапе инициализации. Если вы можете гарантировать, что одинаковое количество элементов управления будет добавлено в том же порядке во время Init, то ViewState для этих элементов управления будет правильно отслеживаться на каждом PostBack. В основном вам нужно будет сохранить самые последние добавленные метку и литерал в Session, и чтобы Panel извлекала их при следующем запросе, чтобы убедиться, что они были добавлены обратно во время Init. Вам также необходимо сохранить счетчик, чтобы Panel знала, сколько наборов элементов управления нужно добавить во время инициализации.

...