آموزش ASP.Net به زبان ساده > آموزش مدل فرم های وب ASP.Net Web
Forms
درس ششم : آموزش کار با قابلیت ViewState و کاربرد آن در فرم های ASP.Net
مقدمه و معرفی قابلیت View State در ASP.Net :
در Asp کلاسیک هنگامی که شما یک فرم را تکمیل و سپس به سرور ارسال ( یا در اصطلاح Submit
) می کنید ، کلیه مقادیر وارد شده در فرم پاک می شوند .
حال فرض کنید شما یک فرم را با کلی اطلاعات تکمیل نموده و آن را به سرور ارسال کرده
اید . اما صفحه با رخ دادن اشکالی ( error ) ، بدون اینکه عملیات ثبت اطلاعات به صورت
موفقیت آمیز انجام شود ، از سرور باز گردد . چه می شود ؟
کلیه اطلاعاتی که در فرم وارد کرده بودید پاک شده و می بایست همگی را از اول پر کنید
. تازه این خطر وجود دارد که باز در اجرای فرم اشکال رخ داده و فرم ناقص برگردد . کار
شما چندین برابر می شود ... !! .
این اشکال نمایشی از عدم وجود یک قابلیت به نام ViewState یا نگهداری وضعیت صفحه در
ASP کلاسیک است .
اما در Asp.Net وضع به گونه ای دیگر است . هنگامی که شما یک فرم را در یک صفحه aspx.
ارسال می کنید ، فرم با همان مقادیر وارد شده قبلی به صفحه باز می گردد . این کار بوسیله
قابلیت ViewState انجام می شود .
ViewState وضعیت و اطلاعات کلیه اجزا و عناصر فرم را در قالب فیلدهای مخفی ( Hidden
Field ) که درون یک فرم با خاصیت " runat = " server قرار دارد ، نگهداری
می کند .
همانند قطعه کد زیر . به کد دقت نمایید :
|
کد
|
<form name="_ctl0" method="post" action="page.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTI0ODU5MDE1Ozs+ZBCF2ryjMpeVgUrY2eTj79HNl4Q=" />
.....some
code
</form>
|
توضیح نحوه عملکرد ViewState :
هنگامی که شما فیلدهای یک فرم ASP.Net را پر کرده و آن را ارسال یا Submit می کنید
، صفحه ی ASP.Net ای که قابلیت ViewState در آن فعال باشد ، مقدار هر یک از فیلد ها
را به صورت یک تگ <input> از نوع " type = " hidden و یک نام مشخص ، در پشت پرده
ذخیره می کند .
چنانچه صفحه به صورت موفقیت آمیز به مقصد POST شد ، مقادیر این فیلدهای مخفی و موقتی
پاک می شوند . اما چنانچه صفحه با اشکال به مبدا باز گردد ، فرم از این فیلدها برای
بازیابی مقادیری که قبلا در کادر های داده ای وارد کرده بودید ، استفاده می کند .
همچنین هر زمان که لازم باشد ، صفحه به وسیله کنترل های مخفی hidden False می تواند
به محتویات کنترل های فرم دسترسی داشته باشد .
نکاتی راجع به خاصیت ViewState :
قابلیت ViewState بصورت پیش فرض در صفحات Asp.Net فعال هستند . اما شما می توانید به
دلخواه و نیز بر اساس مسایل امنیتی این قابلیت را در صفحه ASP.Net خود غیرفعال کنید
.
برای این منظور مقدار خاصیت EnableViewState را همانند کد زیر در بخش اعلان بالای صفحه
بر روی مقدار false قرار دهید .
|
کد
|
<%@ Page Language="VB" EnableViewState = "false"
%>
|
همچنین می توانید به جای غیر فعال کردن این خاصیت برای کل صفحه ، آن را درون هر کنترل
موجود در فرم نیز بصورت تکی غیرفعال کنید .
به مثال های زیر دقت نمایید . در حالت اول ، وضعیت ASP کلاسیک بوده و فرم با ارسال
به مقصد ، اطلاعات خود را از دست می دهد . در حالیکه در مثال دوم با بهره گیری از خاصیت
ViewState اطلاعات فرم در حافظه نگهداری می شوند .
مثال های عملی :
مثال عملی 1 : وضعیت فرم ها در ASP کلاسیک - در مثال
زیر یک فرم ساده و کلاسیک ASP قرا دارد . هنگامی که شما مقداری را در کادر متن fname
وارد می کنید ، این مقدار به صفحه ارسال شده و صفحه با یک پیغام جدید باز می گردد .
اما در زمان بازگشت ، محتویات وارد شده در کادر متن نیز پاک می شود . به عبارت دیگر
به علت فعال نبودن قابلیت ViewState در صفحات asp ، اطلاعات صفحه از بین می روند .
برای امتحان عملکرد فرم ، بر روی خروجی مثال کلیک نمایید :
|
کد
|
<html>
<body>
<form action="demo_classicasp.aspx"
method="post">
Your name: <input
type="text" name="fname" size="20" />
<input type="submit" value="Submit"
/>
</form>
<%
Dim fname As
String
fname=Request.Form("fname")
If fname<>""
Then
Response.Write("Hello
" & fname & "!")
End If
%>
</body>
</html>
|
|
خروجی
|
مشاهده خروجی مثال
|
مثال عملی 2 : وضعیت فرم ها در ASP.Net با فعال بودن قابلیت
ViewState . در مثال دوم کد یک صفحه ASP.Net را که دارای قابلیت ViewState می باشد
را قرار داده ایم . در این صفحه مقداری که در کادر متن فرم وارد می کنید ، پس از
Submit فرم از بین نرفته و درون کادر متن باقی می ماند :
|
کد
|
<script runat="server">
Sub submit(sender As Object, e As EventArgs)
lbl1.Text="Hello " & txt1.Text & "!"
End Sub
</script>
<!DOCTYPE html>
<html>
<body>
<form id="Form1" runat="server">
Your name: <asp:TextBox
id="txt1" runat="server" />
<asp:Button ID="Button1"
OnClick="submit" Text="Submit" runat="server" />
<p><asp:Label id="lbl1"
runat="server" /></p>
</form>
</body>
</html>
|
|
خروجی
|
مشاهده خروجی مثال
|
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1
حمایت نمایید :