PDA

View Full Version : مشکل عجیب در هنگام Refresh کردن



mohsen99
شنبه 07 شهریور 1383, 16:21 عصر
مدتی قبل با استفاده از Asp.Net یک سایت تهیه می کردم
در یکی از صفحات که مخصوص ورود اطلاعات بود اگر کاربر بعد از زدن دکمه save صفحه را refresh می کرد یک بار دیگر تابع مربوط به دکمه save اجرا می شد و اطلاعات دوباره در DB ذخیره می شد .
چند روز پیش به طور اتفاقی متوجه شدم دقیقا همین مشکل در سایت orkut هم وجود دارد :shock:
به این صورت که اگر در قسمت اضافه کردن عکس (Album) یک عکس اصافه کنید و دکمه refresh را بزنید یک بار دیگر همان عکس اضافه می شود
کسی علت و راه حل این مشکل را می دونه؟؟؟؟؟؟

Vahid_Nasiri
شنبه 07 شهریور 1383, 18:08 عصر
در مورد کار اول و دوم، خیر! منطق صحیحی اعمال شده. اگر شما دوبار اطلاعات را بفرستید باید دوبار ثبت شود (ریفرش کردن در این حالت ، همان اطلاعات قبلی را به همراه دارد و یعنی شما دوباره عمدا درخواست ثبت داده اید ). ولی راه بهتر این است که با ست کردن مدت زمان کاشه کردن صفحه، این مورد را منتفی کنید. یعنی کاربر نه راه پس داشته باشد و نه راه پیش.... و به محض اینکار با یک پیغام خطای "صفحه اکسپایر شده" مواجه شود.

یک نکته رو هم فراموش نکنید. باید در رخداد load شدن صفحه چک کنید که آیا postBack‌ است یانه؟ این مورد خصوصا در هنگام *ادیت کردن* خودنمایی می کند و اگر این مورد چک نشود شاید نصف روز وقت شما به دیباگ کردن برنامه ای که چیزی ثبت نمی کند! ، تلف می شود...

mohsen99
یک شنبه 08 شهریور 1383, 08:08 صبح
به نظر من منطقا با refresh کردن فقط باید تابع Page_Load اجرا شود
اما تابع مربوط به دکمه save نیز اجرا می شود

MSYNK
یک شنبه 08 شهریور 1383, 16:30 عصر
با سلام

به نظر من منطقا با refresh کردن فقط باید تابع Page_Load اجرا شود
خیر٬
چون صفحه(به همراه تمام محتویاتی که به سمت سرور postback میشود!)کاشه(cache) میگردد! پس منطقی این است که با (refresh)کردن صفحه قبل از به سر آمدن مدت زمان کش(کاشه) شدن! دوباره همان محتویات قبلی به سرور فرستاده شود!(به همراه تمامی دستورات و تغییراتی که باید اعمال شوند!) و فکر میکنم که علت نمایش اون پیغام مشهور هنگام refresh کردن صفحات aspx نیز همین باشه.
در هر صورت...
موفق باشین.

MSYNK
یک شنبه 08 شهریور 1383, 16:37 عصر
با سلامی دوباره
راستی فکر کنم برای اجرای صفحه بدون در نظر گرفتن کاشه(cache) باید : ctrl + F5 رو به کار برد!
موفق باشین.