PDA

View Full Version : سوال: cache شدن تصویر ابزار image و عوض نشدن آن (نحوه رفرش تصویر ابزار image) *کمک*



malloc
شنبه 25 آذر 1391, 00:08 صبح
سلام دوستان.
ابزار captcha رو نوشتم اما مشکل دارم با رفرش تصویر.

من یه دکمه دارم و یه ابزار Image که جفت اینا تو UpdatePanel هستن.

آدرش عکس ابزار image بصورت زیره :

Image1.ImageUrl = "~/after.jpg";
که عکس هم این شکلیه :
96684
حالا من رو کلیک دکمه یه تابع نوشتم که یه عکس با عدد های جدید تولید میکنه و همنام با عکس بالا ذخیره میکنه اما نمیدونم چرا عکس ابزار image رفرش نمیشه.

اینم تابعی که نوشتم

private void Create_Picture()
{
Bitmap m = new Bitmap(45, 20);
Graphics g = Graphics.FromImage(m);
g.Clear(System.Drawing.Color.DarkOrange);
g.DrawString(RandNum, new Font("tahoma", 12, FontStyle.Strikeout), SystemBrushes.WindowText, new PointF(0, 0));
m.Save(Server.MapPath("~/after.jpg"), ImageFormat.Jpeg);
Image1.ImageUrl = "~/after.jpg";
Image1.DataBind();
}

و ضمنا اینم بگم که عملا تابع اجرا میشه و عکی تو ریشه پروژه عوض میشه اما این جابجایی تا زمانی که صفحه رفرش نشه برای ابزار image اعمال نمیشه .

اگه جایی نا مفهموم بود بگید توضیح بدم

aserfg
شنبه 25 آذر 1391, 08:01 صبح
1) برای ایجاد تصویر کپچا باید فایل تصویری به صورت on the fly تولید شود . و ضمنا آبجکت ساخته شده از کلاس Bitmap باید dispose شود .

Bitmap m = new Bitmap(45, 20);
...
m.Dispose();

2) اینکه چرا تصویر بعد از لود شدن مجدد صفحه نمایش داده می شود به رویدادی است که تابع Create_Picture شما صدا زده می شود نیز بستگی دارد .


مرسوم است که از Generic handler های برای این کار استفاده شود . یک نمونه ساده در آدرس زیر توضیح داده شده :

http://codes.codedigest.com/CodeDigest/88-A-Simple-CAPTCHA-Image-Verification-in-C--and-ASP-Net.aspx

malloc
شنبه 25 آذر 1391, 19:00 عصر
2) اینکه چرا تصویر بعد از لود شدن مجدد صفحه نمایش داده می شود به رویدادی است که تابع Create_Picture شما صدا زده می شود نیز بستگی دارد .توی رویداد کلیک دکمه (btnRefresh) اون کد رو فراخونی میکنم


مرسوم است که از Generic handler های برای این کار استفاده شود . یک نمونه ساده در آدرس زیر توضیح داده شده :
خوب دوست عزیز من اینکارو کردم و تابع رو بردم توی handler اما حالا رو دکمه رفرش تصویر چی بنویسم؟؟؟؟ بنویسم image1.databind که خوب این کاری انجام نمیده

hamed_hossani
شنبه 25 آذر 1391, 19:31 عصر
سلام
چون نیاز به post back دارد
از روش ajax برای تغییر عکس استفاده کنید
http://www.dotnettips.info/Post/125/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%88%D8%AC%D9%88%D8%AF-%D9%86%D8%A7%D9%85-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-jQuery-Ajax-%D8%AF%D8%B1-ASP-Net

malloc
شنبه 25 آذر 1391, 21:25 عصر
مشکلم حل شد.میگم که اگه یکی مثل من بود استفاده کنه.
نکته اینجا بود که من باید آدرس عکس رو اینجوری میدادم :

Image1.ImageUrl = @"~/after.jpg?" + Guid.NewGuid().ToString();
یعنی تنها تفاوت کد پست اول که باعث مشکل واسه من میشد تعویض همین خط کد بود

emad0418
دوشنبه 18 مرداد 1395, 12:18 عصر
دوست من منم دقیقا این مشکلو دارم ولی با روش شما حل نمیشه الان اصلا هیچی نشون نمیده
مشکلم حل شد.میگم که اگه یکی مثل من بود استفاده کنه.
نکته اینجا بود که من باید آدرس عکس رو اینجوری میدادم :

Image1.ImageUrl = @"~/after.jpg?" + Guid.NewGuid().ToString();
یعنی تنها تفاوت کد پست اول که باعث مشکل واسه من میشد تعویض همین خط کد بود

malloc
سه شنبه 19 مرداد 1395, 09:22 صبح
دوست من منم دقیقا این مشکلو دارم ولی با روش شما حل نمیشه الان اصلا هیچی نشون نمیده

شما خط کد آدرس دهی عکستو بزار تا برسی کنیم