【发布时间】:2014-05-15 09:36:18
【问题描述】:
下面的代码包含两个更新面板,都将UpdateMode 设置为“条件”。一个有一个Timer,每5秒触发一次,另一个有一个Label和TextBox(AutoPostBack设置为true),带有一个改变标签文本的有线TextChanged事件。计时器不参与页面渲染:它执行心跳和其他日志记录操作。发生的情况是每次用户在文本框中键入输入并触发计时器时都会触发 TextChanged 事件,从而有效地更改标签文本,即使回发来自另一个更新面板(带有计时器的面板)。我希望 TextChanged 事件仅在文本框由于用户操作而失去焦点时触发。可能吗?还是我应该避免使用System.Web.UI.Timer 并使用其他东西?在这种情况下呢?
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick"
Interval="5000"></asp:Timer>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server"
ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"
ontextchanged="TextBox1_TextChanged"></asp:TextBox>
<asp:Label ID="Label1" runat="server"
Text="Label"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TextBox1"
EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
后面的代码:
protected void Timer1_Tick(object sender, EventArgs e)
{
// Heartbeat, logging and other stuff
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text;
}
【问题讨论】:
-
第一个是WinForms
标签: asp.net timer textbox updatepanel textchanged