2

次のコードに似たASP.NETWebサイトがあります。

.aspx

<asp:UpdatePanel ID="UpdatePanel" runat="server">
    <ContentTemplate>
        <table id="RatesTable">
            <tr>
                <td>Hotel</td>
                <td>&nbsp;</td>
            </tr>
            <tr id="NewRateRow">
                <td>
                    <asp:DropDownList ID="TxtHotel" runat="server" OnSelectedIndexChanged="TxtHotel_SelectedIndexChanged" AutoPostBack="true">
                    </asp:DropDownList>
                </td>
                <td>
                    <a href="javascript:AddHotelPackRate()">Add</a>
                </td>
            </tr>
        </table>
    </ContentTemplate>
</asp:UpdatePanel>

AddHotelPackRate JS関数は、ドロップダウンの値を読み取り、この値を含む新しい行をテーブルの先頭に「描画」します。問題は、この後、SelectIndexChanged関数を再度実行すると、前に追加されていた行が消えてしまうことです。

ポストバック後にこのタイプの情報が失われないようにする方法はありますか?

4

2 に答える 2

3

更新パネル内にJSによってコンテンツを追加するか、データが再描画されたときにデータが存在し続けるように、ポストバックにJSコードが追加したデータを追加する必要があります。

簡単な方法は、おそらくAddHotelPackRate、他のデータベースなどと一緒にサーバー側のコードを介して行を追加するupdatepanel更新を発生させることです。それが持続するように変更します。

編集:別のコメントは、選択したアイテムが変更されたときに更新パネルを更新できなかったという事実も示しているため、問題を完全に回避できます(別の方法で)。

于 2012-04-04T20:32:42.017 に答える
-1

問題は、更新パネルにトリガーを追加しなかったことです。コードを次のように変更します。

<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
    <table id="RatesTable">
        <tr>
            <td>Hotel</td>
            <td>&nbsp;</td>
        </tr>
        <tr id="NewRateRow">
            <td>
                <asp:DropDownList ID="TxtHotel" runat="server" OnSelectedIndexChanged="TxtHotel_SelectedIndexChanged" AutoPostBack="true">
                </asp:DropDownList>
            </td>
            <td>
                <a href="javascript:AddHotelPackRate()">Add</a>
            </td>
        </tr>
    </table>
</ContentTemplate>
<Triggers>
   <asp:AsyncPostBackTrigger ControlID="TxtHotel" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
于 2012-04-04T20:35:10.540 に答える