PDA

View Full Version : سوال در مورد view state و حفظ وضعیت چک باکس



c#_web
پنج شنبه 09 شهریور 1385, 17:31 عصر
با سلام.من در view state مشکل دارم .لطفا اگر کس میتواند مرا راهنمایی کند.
در فرم اولم یک چک باکس و یک دکمه رادیویی دارم که با انتخاب عضوی از آنها به فرم دیگری میرود.وبعد از پر شدن آن فرمها دوباره به فرم اول بر میگردد.ولی انتخاب در چک باکس و در دکمه رادیویی از بین رفته است. لطفاً مرا راهنمایی کنید در کجای برنامه از view state استفاده کنم و چگونه

ViewState["var"] = "value"; را برای مقداردهی به چک باکس و دکمه رادیویی استفاده کنم.و نیز چگونه از
string val = (string)ViewState["var"]; استفاده کنم برای خواندن مقدار چک باکس یا دکمه رادیویُی انتخاب شده؟
یعنی تیک زده شده سر جای خود بماند؟

nazaninam
پنج شنبه 09 شهریور 1385, 18:20 عصر
دوست عزیز شما به این نکته دقت کنید که viewstate حالت ماندگاری صفحه است و وقتی کاربرد داره که شما داخل اون صفحه رفرش شوید نه اینکه برید توی یک صفحه دیگه و دوباره برگردید .
دلیل استفاده از Viewstate رو برای این کارتون هم درک نمی کنم ؟!! آیا پروژه یا تکلیف است؟

c#_web
جمعه 10 شهریور 1385, 00:07 صبح
پروژه است .برنامه من به صورتی است که در یک فرم یک لیست از چک باکس دارم.که بر اساس انتخاب هر عضو از چک باکس پنل مخصوص به آن باز میشود تا اطلاعاتی را جع به آن دریافت کند.که من مجموعه همه این پنلها را در یک صفحه جداگانه گذاشته ام . و مثلاً اگر دو تا یا سه تا از چک باکسها را انتخاب کرد میخواهم به صفحه پنلها رفته و پنلهای مربوط به عناصر تیک خورده نمایان شوند.
و بعد از پر شدن پنلها ، میخواهم دوباره به صفحه اول برگشته و اطلاعاتی ثبت کنم.
اما هنگام برگشت ، تیکهای موجود در چک باکس از بین رفته است.
لطفاً مرا کمک کنید چگونه مشکلم را حل کنم؟
ممنون میشوم.

nazaninam
جمعه 10 شهریور 1385, 11:50 صبح
دوست عزیز خوب معلومه که این اتفاق میفته....
شما چرا از دو صفحه استفاده می کنید؟ از چند پنل داخل همون صفحه استفاده کنید و با visible اونا بازی کنید یا اینکه اگر مجبورید حتما وارد صفحه دیگری شوید باید از روش های انتقال اطلاعات بین صفحات استفاده کنید که این مطلب بارها مطرح شده و میتونید جستجو کنید
راه های متداول انتقال اطلاعات بین صفحات :

1- querystring
2- کوکی ها
3 - سشن ها
4- متغیر ها share
5- فرم ها
6- شی اپلیکشین
7-شی کانتکس
8- و حتی دیتابیس یا فایل های متنی و xml و بسیاری از راه های دیگر...

مهدی کرامتی
جمعه 10 شهریور 1385, 12:59 عصر
شما میتونید وضعیت چک باکس رو در event ای که باعث هدایت به صفحه جدید میشود در Session ذخیره کنید، و در هنگام بازگشت اونها را تنظیم کنید:


protected void Page_Load(object sender, EventArgs e)
{
if ((!Page.IsPostBack) && (Session["CheckBox1_State"] !=null))
{
// Restore CheckBox States
CheckBox1.Checked = (bool)Session["CheckBox1_State"];
CheckBox2.Checked = (bool)Session["CheckBox2_State"];

// Remove Session Variables
Session["CheckBox1_State"] = null;
Session["CheckBox2_State"] = null;
}
}

protected void Button1_Click(object sender, EventArgs e)
{
Session["CheckBox1_State"] = CheckBox1.Checked;
Session["CheckBox2_State"] = CheckBox2.Checked;

Response.Redirect("Page2.aspx");
}

babakj
پنج شنبه 11 بهمن 1386, 18:58 عصر
سلام
من توسط آبجکت State تابع override شده
SavePageStateToPersistenceMedium مقدار pair رو می گیرم و توی یه session ذخیره می کنم برای اینکه بتونم وقتی به صفحه مورد نظرم دوباره برگشتم viewstate سابق دوباره load بشه اما با لود کردنش مشکل دارم و نتونستم در ثانی می خوام مطمین بشم کاری که تا الان کردم درسته و با مقدار pair می توم viewstate سابق رو لود کنم یا راه دیگه ایی داره ؟

Behrouz_Rad
پنج شنبه 11 بهمن 1386, 20:32 عصر
اما با لود کردنش مشکل دارم و نتونستم
احتمالا باید حدس بزنیم که چه کار کردی که موفق نشدی؟ ;)

babakj
پنج شنبه 11 بهمن 1386, 23:17 عصر
احتمالا باید حدس بزنیم که چه کار کردی که موفق نشدی؟ ;)

آره شاید بد سوالم رو مطرح کردم
بذار این جوری بگم
در واقع من می خوام محتویات ViewState یک صفحه رو توی یک Session ذخیره کنم مثل همون مثالی که توی وب لاگت داشتی
ولی می خوام هر موقع اون صفحه لود شد هر چیزی که توی آخرین حالت صفحه بوده بر گرده
منتها من همونکارا رو انجام دادم اما توی صفحه ام گرید ویو دارم که PageIndexChaning داره و از این خرت و پرتا ..
اونجا هم گفته بودی که :
نکته ی مهم دیگه این هست که وقتی مدیریت ViewState رو خودتون بر عهده می گیرید، باید روال هایی از کنترل ها که موجب ایجاد تغییر مقدار یک کنترل میشن رو هم Override کنید. مثلا روال TextChanged برای TextBox ها و SelectedIndexChanged برای DropDownList ها و …
اگر این روال ها رو Override نکنید، روال SavePageStateToPersistenceMedium برای این کنترل ها فراخوانی نمیشه و حالتشون در ViewState قرار نمی گیره.

سوال من : من می خوام ViewState کلی رو ذخیره کنم و موقع لود شدن صفحه دوباره از جایی که ذخیره کردم بدم تو صفحه از یک روش مستر ASPX استفاده کردم که فقط یک صفحه اصلی دارم و نمی تونم تک تک مدیریت کنم آیا راهی داره ؟
یعنی وقتی من توی تابع LoadPageStateFromPersistenceMedium مقدار ذخیره شده رو Return می کنم این مگه همون ViewState کل صفحه نیست ؟؟
چه طوری می تونم از شر مدیریت تک تک عناصر خلاص بشم ؟

ببین بهروز جان مثلا الان توی یه صفحه هستیم داریم با Grid کار می کنیم و هر لحظه ممکنه صفحه رو ببندم
می خواهم داخل اون صفحه بعد از LoadComplete یا هر event ی که صحیح هست بعد از هر کاری ، مثل ListGridView_PageIndexChanging یا
ListGridView_SelectedIndexChanging یک نسخه از آخرین ViewState من همواره در Session ذخیره بشه که دوباره بعد از برگشت به این صفحه بتونیم همان page و همان سطر انتخاب شده رو که قبلا در ViewState بود نمایش بدم توی اون مثال با کلیک شدن او دکمه GO می آمد و ذخیره می کرد اما من می خوام بعد از هر کار این رو انجام بدم

راستی به این لینک هم یه نگاهی بنداز
ایا این کد از نظر فنی درسته ؟
http://www.velocityreviews.com/forums/t365573-how-and-why-to-save-viewstate-in-a-session-object.html

Behrouz_Rad
جمعه 12 بهمن 1386, 00:36 صبح
برای اینکه مشکل سر و کار نداشتن با تک تک صفحات رو حل کنی باید کلاسی ایجاد کنی که از Page ارث ببره و اون دو روال رو در اون Override کنی و تمامی صفحات رو از این کلاس به ارث ببری.

من فکر نمی کنم قسمت مبهمی وجود داشته باشه. این که میگی "بعد از هر کاری"، باید بدونی که اون دو روال در هر PostBack صفحه به طور خودکار اجرا میشن و نیازی نیست که تو اونها رو فراخوانی کنی.

موفق باشید.