回发后保留值

本文关键字:保留 | 更新日期: 2023-09-27 18:29:58

我有一个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函数时,以前添加的行现在消失了。

有没有办法避免回发后丢失此类信息?

回发后保留值

您要么必须在更新面板中添加JS添加的内容,要么需要添加JS代码在回发中添加的任何数据,以便在重新绘制数据时它仍然存在。

简单的方法可能只是让AddHotelPackRate引起更新面板,通过服务器端代码和任何其他数据库等添加行。改变,使其继续存在。

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

问题是您没有在更新面板中添加触发器。将您的代码更改为:

<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>