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 オブジェクトの新しいインスタンスを作成することを思い出してください。つまり、最後のページに追加したコントロールはなくなります。Panel は新しいリクエストごとに空として初期化されるため、最新のリテラル/ラベルのペアのみが追加されます。

1 つの解決策は、必要なすべてのテキスト情報を Session に追加し、Prerender 中に Session にあるものから Panel に動的なラベルとリテラルを生成させることです。

別の解決策はより複雑ですが、Init フェーズで Panel にラベルとリテラルを動的に追加させることができます。Init 中に同じ数のコントロールが同じ順序で追加されることを確認できる場合、これらのコントロールの ViewState は各 PostBack で適切に追跡されます。基本的に、最後に追加されたラベルとリテラルをセッションに保存し、次のリクエストでパネルにフェッチさせて、初期化中に追加されたことを確認する必要があります。Init 中に追加するコントロールのセット数を Panel が認識できるように、カウンターを格納する必要もあります。

于 2009-08-11T06:35:25.987 に答える