【发布时间】:2015-07-14 15:49:06
【问题描述】:
我有
- 两个 UpdatePanel 用于显示数据库中的数据。
- 一个计时器,间隔设置为 5 秒。
- 一个 jQuery 函数使 UpdatePanel2 内的内容自动滚动。
使用的插件:http://logicbox.net/jquery/simplyscroll/
目标是每 5 秒检查一次数据库中的数据是否发生变化,然后自动更新 panel1 和 panel2(如果没有任何变化则什么都不做,我不想每 5 秒刷新一次这些面板,因为 panel2 一直在滚动,所以如果刷新它会从头开始再次滚动)。
问题是,当函数Timer1_Tick 被触发(每 5 秒)时,它会以某种方式导致页面重新加载,并且 jquery 函数不再起作用。面板 2 数据不再滚动,当我再次使用
ScriptManager.RegisterStartupScript(
UpdatePanel2,
UpdatePanel2.GetType(),
"ScrollMessage", "ScrollMessage();", true);`
这样,它会导致数据从头开始滚动,虽然没有更新任何数据。所以不调用jquery是不行的,调用了就从头做。
有没有办法解决这些问题
- 在触发事件执行后(部分回发/重新加载页面)如何让 jquery 继续工作(不重新加载)?
- 如何在没有部分回发的情况下触发 UpdatePanel?
- 有什么更好的方法来检查数据库中的数据是否已更改?
JavaScript
function ScrollMessage() {
$("#scroller-message").simplyScroll({ frameRate: 100 });
}
标记
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Timer ID="Timer1" runat="server"
Interval="5000"
OnTick="Timer1_Tick">
</asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Literal ID="ltl1" runat="server">
</asp:Literal>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="scroller-message">
<asp:Literal ID="ltl2" runat="server"></asp:Literal>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel>
后面的代码
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//*display data to ltl1 and ltl2*
ScriptManager.RegisterStartupScript(
UpdatePanel2,
UpdatePanel2.GetType(),
"ScrollMessage", "ScrollMessage();", true);
}
}
protected void Timer2_Tick(object sender, EventArgs e)
{
//update panel1 if new data updated
if (condition is good)
{
ltl1.Text = "new data";
}
//update panel2 if new data updated
if (condition is good)
{
ScriptManager.RegisterStartupScript(
UpdatePanel2,
UpdatePanel2.GetType(),
"ScrollMessage", "ScrollMessage();", true);
ltl2.Text = "new data";
}
}
【问题讨论】:
-
作为建议,您是否考虑过改变方法而不使用 UpdatePanels?除非您需要这些用于其他用途,否则最好只使用 jquery 来操作数据和 html。
-
可能是一个样本或一些文章会有所帮助,好吗?我的目标是:不断检查数据库表是否有变化然后刷新页面,就是这样。
标签: jquery asp.net webforms asp.net-ajax