PDA

View Full Version : ViewState به زبون خودمونی یعنی چی؟!



Developer Programmer
سه شنبه 12 مرداد 1389, 22:19 عصر
هرچی کتاب و مطلب میخونم که بدونم ViewState به چه دردی میخوره و چرا ساخته شده، چیزی دستگیرم نمیشه.

کسی میتونه کمک کنه؟

Vahid_moghaddam
سه شنبه 12 مرداد 1389, 22:34 عصر
در asp.net برای نگهداری اطلاعات به خاطر استفاده از اونها در در خواست های مختلف، چند روش وجود داره. به طور کلی روش های نگهداری اطلاعات رو به این منظور می شه به صورت زیر دسته بندی کرد:
application state
session state
view state
در viewstate شما اطلاعاتی رو که لازم دارید در صفحه ذخیره می کنید. در این حالت هر صفحه فقط به viewstate خودش دسترسی داره (بر خلاف مثلا session که تمام در خواست های مربوط به یک کلاینت یا به عبارت بهتر یک user بهش دسترسی دارند)
مثال واضح viewstate نگهداری اطلاعت کنترل ها در صفحه است. وقتی شما یک textbox دارید، در هر بار load شدن صفحه این textbox رندر می شه به یک html (تگ input). وقتی شما متنی رو وارد textbox می کنید، در load شدن دوباره صفحه این مقدار دوباره باید به textbox داده بشه (اگه لازمه). بنابراین مقدار این textbox در viewstate ذخیره می شه و برای عملیات رندر شدن، خونده می شه.
نکته مهم در استفاده از viewstate، حجم اون هست که مسلما هر چی مقادیر بیشتری رو در viewstate نگه دارید، حجم صفحه بالاتر می ره و سرعت load پایین تر

Mostafa_Dindar
سه شنبه 12 مرداد 1389, 23:47 عصر
معمولا کسانی که PHP کار کرده باشند با درک ViewState مشکل دارند . ViewState یکی از روشهای State mangement در دات نت هست که در نهایت تبدیل به Hidden field میشود .

حالا State Management ها چی هستند ؟ از اونجایی که ما در وب از پروتوکل http استفاده میکنیم و پروتوکل Http هم مادرزاد StateLess هست , یعنی هیچ مکانیزمی ندارد که تشخیص دهید این Request و Request قبلی هر دو از یک کامپیوتر آمدند , پس ما یه یکسری راهکار برای این مشکل نیاز داریم که این راهکارها در قالب State Management ها ارائه شده اند .

State Mangement ها در دات نت عبارتند از :

ViewState , QueryString , Cookies ,Session State , Application State , Profile , Caching

حال اینکه هریک در کدام مواقع استفاده شود و چرا و چگونه , بحث دیگریست . از اونجایی که سوال شما در مورد ViewState هست به طور خلاصه عرض میکنم :

در صورتی که بخواهید اطالاعاتی رو در حوزه یک صفحه نگهدای کنید اولین انتخاب شما باید ViewState باشد .
ViewState به طور پیش فرض برای حفظ مقادیر Properties از یک کنترل ASP.NET در بین Post Back ها بکار میرود . ولی شما میتونید هر نوع داده Serialize رو در اون قرار بدید . یعنی همه DataType های ساده دات نت و Object های شخصی خودتون . این اطلاعات در Collection صفحه قرار میگیرند و با نامی که شما میدین ذخیره میشوند . نکته ای رو که همیشه باید در نظر داشته باشید هنگام بازیابی از ViewState باید Cast مناسب صورت گیرد , چون هنگام ذخیره هر مقدار در ViewState تبدیل به شیی Object میشود . همچنین در نظر داشته باشید که در صورتی که بخواهید مقدار ViewState ای رو بخونید که وجود ندارد با خطای Null Reference مواجه خواهید شد , پس همیشه قبل از خواندن برسی کنید که مقدار داشه باشد .


این اطلاعات کجا قرار میگیرند؟ Hidden Fields
عمرشون چقدر هست ؟ تا وقتی که به همون صفحه Post Back کنیم
حوزه اون کجاست ؟ فقط همون صفحه
چقدر امنیت داره ؟ راحت میشه خوندش ولی تغیر نمیشه داد , در صورتی که بخواین میتونین Encrypt کنید . ( در دایرکتیو صفحه )
تاثیر اون بر روی کارایی ؟ استفاده بیش از اندازه حجم صفحه رو هنگام Transmit زیاد میکنه ولی خبر خوب اینکه فشاری بر روی سرور نمیاره


موفق باشید