我有一个ASP.NET网站,其代码类似于以下代码:
的.aspx
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<table id="RatesTable">
<tr>
<td>Hotel</td>
<td> </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函数时,之前添加的行现在消失了。
有没有办法避免在回发后丢失这类信息?
答案 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> </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>