PDA

View Full Version : refresh صفحه و دردسرهای آن



shahramasp
شنبه 15 اردیبهشت 1386, 08:31 صبح
من یک فرک دارم که از طریق اون کاربران می تونند سر عنوان های مختلفی رو بسازند و در زمان هر بار زدن کلید ذخیره شود هم اطلاعات اضافه می شود و هم DataGrid ی که در آن صفحه است Bind مشود . حالا مشکل اینجاست که در زمان درج هر عنوان پس از درج اگر 100 بار هم کلید F5 یا همان refresh صفحه کنند 100 رکورد جدید هم اضافه می شود یعنی Button زده شده با هر refresh دوباره صدا زده می شود !! چه کنم که جلوی این کارو بگیرم !!

MehranZand
شنبه 15 اردیبهشت 1386, 08:54 صبح
راه های زیادی وجود داره برای اینکار یکی از ساده ترین راه ها redirect کردن پس از
عمل insert به همان صفحه است به اینصورت:


Response.Redirect(Request.Url.ToString(), false)

shahramasp
شنبه 15 اردیبهشت 1386, 09:03 صبح
ممنون ولی اگر فکر می کنید راه منطقی تری هم وجود داره لطفا بفرمایید

MehranZand
شنبه 15 اردیبهشت 1386, 10:20 صبح
راه دیگه ای که داره استفاده از session و viewstate برای کنترل کردن reinserting است.
در این روش شما باید در رویداد Page_Load صفحه از یک شرط استفاده کنید که اگر برای
اولین بار صفحه لود میشود مقداری را که بهترین مقدار زمان حال DateTime.Now است
درون متغییرSession("update") قرار بدهید.



IfNot Page.IsPostBack
Session("update") = Server.URLEncode(System.DateTime.Now.ToString())
EndIf


و در رویداد Page_PreRender مقدار اختصاص یافته session("update") را به یک متغییر viewstate("update اختصاص بدهید. حالا اگر پست بکی در صفحه شما رخ نداده باشد یعنی
برای اولین بار بخواهید عمل insert را انجام بدهید مقدار session و viewstate یکی خواهد بود
پس کافیه قبل از عمل inserting این دو مقدار را با هم چک کنید اگر با هم برابر بودند inserting
انجام بشود و اگر نه مثلا پیغامی رو به کار نشان بدهید . اما زمانی که عمل insert را انجام دادید حتما باید session("update") را دوباره به روز کرده و مقدار زمان حال را مانند Page_Load درونش قرار بدهید .
بار دوم اگر بخواهد عمل reinserting صورت بگیره به علت اینکه session و viewstate مقدار یکی ندارند پیغام خطا نمایش داده میشود.

کد کامل مثال:


Sub Page_Load (sender As Object, e As EventArgs)
If Not Page.IsPostBack
Session("update") = Server.URLEncode(System.DateTime.Now.ToString())
End If

End Sub
Sub Page_PreRender (sender As Object, e As EventArgs)
ViewState("update") = Session("update")
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
If Session("update").ToString() = ViewState("update").ToString() Then
Add(firstName.Text, lastName.Text)
Message.Text = "Success"
Session("update") = Server.UrlEncode(System.DateTime.Now.ToString())
Else
Message.Text = "Failure - Session"
End If
firstName.Text = ""
lastName.Text = ""
End Sub


پ.ن. Add ساب روتینی است که مقادیر firstname و lastname را در بانک ما درج میکند.

shahramasp
شنبه 15 اردیبهشت 1386, 12:04 عصر
بسیار بسیار متشکرم

Mcraft
دوشنبه 26 تیر 1391, 12:20 عصر
راه ساده تر ()focus است!!!
کافیه بعد از insert ،focus به یک تکست منتقل شه...