我现在正在尝试一些AJAX。我有一个自定义控件出现在我的母版页上,其中有一个更新面板和一个计时器。计时器触发,面板更新,一切都很花哨。除了有些操作我不希望它在每次刷新时执行。似乎每次刷新都会发生整个页面生命周期。我想设置变量,并在刷新时保留它们的值。有没有办法让它只执行timer_tick调用中的内容?
答案 0 :(得分:3)
您可以在页面加载事件中查看Request [“__ EVENTTARGET”]以查看导致回发的控件。如果是定时器控制,则跳出该功能。
假设您的计时器名为“刷新时间”:
protected void Page_Load(object sender, EventArgs e)
{
if (Request["__EVENTTARGET"] == "refreshtimer")
{
return;
}
// etc
答案 1 :(得分:2)
不确定AJAX.Net帖子后面的内容是什么,但我通常会通过检查回发来保护我的其他控件和内容;
protected void Page_Load(object sender, EventArgs e)
{
// if its a post back then my controls should already be setup...
if (!Page.IsPostBack)
{
InitControlData();
}
}
然后它应该通过你的事件处理?
protected void timer_tick(object sender, EventArgs e)
{
// Do my Ajaxy work~
}
答案 2 :(得分:0)
UpdatePanels总是强制整个页面刷新。如果您只想处理页面的某个部分(并且它是固定大小),那么您可以尝试使用iframe。
或者,如果要保存变量,可以将它们放在ViewState或SessionState中,以便它们在回发之间保留
答案 3 :(得分:0)
UpdatePanels无法实现这一点......整个页面将贯穿整个生命周期。正如其他人所提到的,你可以通过使用IsPostBack或ScriptManager的IsInAsyncPostBack来限制发生的处理,但最终这对复杂页面来说不是一个很好的解决方案。
但是,您可以使用页面方法在页面中仅执行一个静态方法,但您必须自己进行Javascript调用并更新UI。以下是一些例子: