راه دیگه ای که داره استفاده از 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 AsObject, e As EventArgs)
IfNot Page.IsPostBack
Session("update") = Server.URLEncode(System.DateTime.Now.ToString())
EndIf
EndSub
Sub Page_PreRender (sender AsObject, e As EventArgs)
ViewState("update") = Session("update")
EndSub
Sub Button1_Click(sender AsObject, 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"
EndIf
firstName.Text = ""
lastName.Text = ""
EndSub
پ.ن. Add ساب روتینی است که مقادیر firstname و lastname را در بانک ما درج میکند.