回发后保持价值

时间:2012-04-04 20:28:16

标签: c# javascript asp.net

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

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

2 个答案:

答案 0 :(得分:3)

您必须在updatepanel内部添加JS添加的内容,否则您需要添加JS代码在回发中添加的任何数据,以便在重新绘制数据时它继续存在。

简单的方法可能只是让AddHotelPackRate导致updatepanel更新,通过服务器端代码和任何其他数据库/等添加行。变化,以便它将继续存在。

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

答案 1 :(得分:-1)

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

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