سلام ,

آیا تا به حال به مواردی برخوردید که بخواهید یک قسمت از صفحه بعد از یک مدت زمان مشخص بهنگام بشه ؟

آیا تا به حال یک صفحه گزارش بازی آنلاین رو دیدید؟ قسمت گزارش هر چند ثانیه مشخص دوباره بروزرسانی میشه .

اینکار به سادگی هر چه تمام با Timer و Update Panel امکان پذیر است .

در اینجا یک مثال ساده رو دنبال میکنیم :

یک ScriptManger و یک UpdatePanel در روی فرم قرار دهید
خاصیت EnablePartialRendering از ScriptManger را برابر True قرار دهید .
خاصیت UpdaeMode از UpdatePanel را برابر Conditional قرار دهید
داخل ContentTemplate از UpdatePanel یک Lable و یک Timer قرار دهید

تا الان MarkUP صفحه aspx شما باید به شکل زیر باشد :

<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="timer1" runat="server" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>


حال بر روی Timer1 دابل کلید کنید و در رویداد Timer1_click اینطور بنویسید:
 protected void timer1_Tick(object sender, EventArgs e)
{
RefreshTheZone();
UpdatePanel1.Update();
}

private void RefreshTheZone()
{
Label1.Text = System.DateTime.Now.ToString();
}


در واقع ما یک متد رو فراخوانی کردیم که در اون متد تاریخ جاری سیستم رو در یک Lable نمایش میده و متد Update از UpdatePanel رو فراخوانی میکنه .

برای اینکه این متد هر 5 ثانیه یکبار تکرار شود , خاصیت Interval از Timer رو برابر 5000 ست میکنیم ( 50000 میلی ثانیه ) .

تنها کاری که باقیمانده باید یک Trigger از نوع AsyncPostBackTrigger برای UpdatePanel بنویسیم :

<Triggers>
<asp:AsyncPostBackTrigger ControlID="timer1" EventName="Tick" />
</Triggers>


حال اگر صفحه را Run کنیم , مشاهده میکنیم که هر 5 ثانیه یکبار بدون PostBack تاریخ سیستم بروز میشود .

هدف ما در اینجا نحوه استفاده از از کنترلهای Timer و UpdatePanel بود وگرنه هیچ کار مفیدی نکردیم .

برای اینکه همه کد رو یکجا داشته باشید من اینجا به صورت کامل میزارم :

صفحه aspx:

<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:Timer ID="timer1" runat="server" Interval="5000" ontick="timer1_Tick" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Timer ID="Timer2" runat="server">
</asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>


و صفحه aspx.cs :

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
Label1.Text = System.DateTime.Now.ToString();
}

protected void timer1_Tick(object sender, EventArgs e)
{
RefreshTheZone();
UpdatePanel1.Update();
}

private void RefreshTheZone()
{
Label1.Text = System.DateTime.Now.ToString();
}


سربلند باشید