2

我有一个类似于以下代码的 ASP.NET 网站:

.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导致更新面板更新,通过服务器端代码以及任何其他数据库/等添加行。变化,使其继续存在。

编辑:另一条评论还提出了这样一个事实,即当所选项目更改时您无法更新更新面板,从而完全避免了该问题(以不同的方式)。

于 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 回答