PDA

View Full Version : سوال: از بین رفتن آبجکت جاوا اسکریپت هنگام PostBack



coolbit
شنبه 21 فروردین 1389, 15:30 عصر
با سلام،

دوستان من در هنگام لود صفحه یک آبجکت جاوا اسکریپت می سازم (یک اینستنس از یک کنترل موتولز).

myClass = new Class('MootoolsClass');بعد از اون نیاز دارم که برای باز کردن یک وب دیالوگ (از کنترل های اینفراجیستیکس) یک PostBack انجام بدم. اما در همین زمان باز شدن وب دیالوگ (زمان پست بک شدن) ظاهر کنترل جاوا اسکریپت خودم رو از دست می دم (برای چند لحظه)، و بعد دوباره ساخته میشه (چون رویداد Load صفحه دوباره اجرا میشه).
اما من نمی خوام این اتفاق بیفته. آیا راه حلی به نظر شما می رسه؟
این رو هم بگم که همه کنترل های من در UpdatePanel قرار دارند.

ممنون میشم.

Keramatifar
شنبه 21 فروردین 1389, 16:21 عصر
دوست عزیز
شما باید زمانیکه می خوای این آبجکت رو بسازی چک کنی که اگر صفحه در حال PostBack نیست اونو بسازی

Server-side, write:

if(IsPostBack) {ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true); } بعد توی اسکریپت میتونی به این شکل PostBack رو چک کنی
if(isPostBack) { // do your thing }

coolbit
شنبه 21 فروردین 1389, 17:00 عصر
دوست عزیز
شما باید زمانیکه می خوای این آبجکت رو بسازی چک کنی که اگر صفحه در حال PostBack نیست اونو بسازی


ممنون از پاسختون،
اما من کاملا متوجه نشدم، و یا سوالم رو درست مطرح نکردم.
من نیاز دارم که همیشه این آبجکت رو داشته باشم. این کلاس موتولز باعث میشه یه TextBox معمولی در صفحه به یک صورت دیگه نمایش داده بشه.
وقتی پست بک می کنیم، آبجکت از بین میره، و TextBox برای چند لحظه ای بصورت عادی خودش به نمایش در میاد، که دلخواه من نیست.

reza.ziyaee
شنبه 21 فروردین 1389, 23:30 عصر
سلام دوست عزیز

تا اونجایی که من تجربه دارم زمانی که صفحه پست بک می شود کد های جاوا از ابتدا اجرا می شوند در نتیجه مقدار متغیر ها هم پاک می شود . و دستورات از ابتدا اجرا می شوند .

coolbit
یک شنبه 22 فروردین 1389, 08:41 صبح
سلام دوست عزیز

تا اونجایی که من تجربه دارم زمانی که صفحه پست بک می شود کد های جاوا از ابتدا اجرا می شوند در نتیجه مقدار متغیر ها هم پاک می شود . و دستورات از ابتدا اجرا می شوند .

سلام دوست گرامی،
بله ظاهرا که همین طور هست.
پیشنهاد دیگه ای برای من ندارین؟ مثلا کنترل رو در یک iFrame قرار بدم، و یا پیش از پست از بک اون رو Hide کنم و بعد از لود شدن دوباره Show کنم، یا هر چیز دیگه ای؟

ممنون میشم.

exlord
یک شنبه 22 فروردین 1389, 10:07 صبح
اگه کد صفحتونو میزاشتین بهتر میشد راهنمایی کرد ... ولی من اینجور فهمیدم که شما کل صفحتونو تو update panel گذاشتین ... اگه اینجوریه .. سعی کنین از چنتا update panel مجزا استفاده بکنین و فقط اون قسمتایی که لازمه تو update panel بزارین.....

coolbit
یک شنبه 22 فروردین 1389, 10:21 صبح
اگه کد صفحتونو میزاشتین بهتر میشد راهنمایی کرد ... ولی من اینجور فهمیدم که شما کل صفحتونو تو update panel گذاشتین ... اگه اینجوریه .. سعی کنین از چنتا update panel مجزا استفاده بکنین و فقط اون قسمتایی که لازمه تو update panel بزارین.....

آخه کد رو از بس دست کاری کردم دیگه خودم هم قاطی می کنم. الان کد خیلی clean نیست.
UpdatePanel هم تاثیر زیادی نداره. اگه برداشته بشه و یا دکمه پست بک رو توی Trigger بزاریم باز هم تفاوتی نمی کنه.
خیلی سعی کردم کاری کنم تا نیاز به پست بک نباشه و کارها مو کلاینت ساید جلو ببرم. اما WebDialogWindow (از Infragistics) بدون پست بک URL جدید نمیگیره. حتی اگه در کد سمت Client آدرس رو بهش بدیم.

coolbit
یک شنبه 22 فروردین 1389, 11:09 صبح
سعی کنین از چنتا update panel مجزا استفاده بکنین و فقط اون قسمتایی که لازمه تو update panel بزارین.....

گرامی،
احتمالا بتونم با این راهنمایی شما مشکل رو مرتفع کنم. در صفحه آزمایشی که جواب میده، اما در صفحه اصلی در مورد UpdatePanel دوم ایراد میگیره.
شاید به این علت که یک جدول کلی در بین این دو UpdatePanel شکسته شده. باید ساختار صفحه رو تغییر بدم تا ببینم چی پیش میاد.

ممنون دوست عزیز

----------------------------------------
ویرایش: مشکل با بکارگیری چند UpdatePanel و بیرون از UpdatePanel قرار دادن کنترل موتولز حل شد.