我有一个简单博客的asp.net页面,看起来像
<asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine">Default Text</asp:TextBox>
<asp:LinkButton ID="lbSend" runat="server" Text="Send" OnClick="lbSend_Click" />
<script type="text/javascript">
//some javascript to click btnSave in update panel for every five minutes.
</script>
<asp:UpdatePanel ID="upSave" runat="server" Style="display: none;">
<ContentTemplate>
<asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
在
背后的代码中protected void lbSend_Click(object sender, EventArgs e)
{
//Gets UserID from session and saves it to table A with txtContent
}
protected void btnSave_Click(object sender, EventArgs e)
{
//Gets UserID from session and saves it to table B with txtContent
}
一切正常。我填写表单并使用lbSend或btnSave将内容插入表中。 JavaScript也点击了btnSave。但是,当填充txtContent需要很长时间,大约40分钟或更长时间时,页面就像过期一样。单击lbSend以异步方式刷新页面,您编写的所有内容都将消失。当我点击时,就像页面已经打开并醒来。当你再次点击它时,lbSend正常工作。
这种“睡眠”的原因是什么?btnSave继续与服务器通信?我该如何防止它。
答案 0 :(得分:1)
你正在做一个Ajax帖子。由于它是一个异步帖子,您的浏览器很乐意继续前进,并且在出现错误之前您不会注意到问题。如果它不是Ajax那么整个页面都会刷新,你会看到一个错误 - 假设你以友好的格式显示错误。
在实现Ajax时,您应该实现自己的错误处理程序,以便向用户显示已发生错误。此外,您应该实现浮动div或对话框,以防止用户在Ajax请求完成之前使用您的网页。我意识到40分钟对于一个简单的插入来说真的很糟糕,但是我会留给你DBA修复它。
让我们来谈谈浮动div或对话框或“模态弹出窗口”。您想在before_Ajax_send函数中打开它并在after_Ajax_receive函数中将其关闭。有关这些功能的更多信息,请参阅Ajax库文档。
当您实施此对话框时,它将增强您的用户体验,因为它会让用户知道您的应用程序正在执行某些操作,因此请抓住您的马匹。
希望这会有所帮助。