امروز هنگام نمايش تصاوير در يك گريد با مشكل زير مواجه شده بودم. (گرفتار شده بودم!!)
فرض كنيد يك فرم درست كردهايد كه يك تصوير به همراه توضيحاتي توسط آن ثبت ميشود. جهت اطمينان خاطر ثبت كننده، تصاوير ثبت شده در يك گريد پائين فرم نمايش داده خواهند شد. نام اين تصاوير همواره ثابت است (براي مثال نام تصوير تشكيل شده است از يك شماره پروژه بعلاوه پسوند فايل).
مشكلي در ثبت تصاوير يا توضيحات آنها وجود نداشت. مشكل در اين بود كه پس از ويرايش ركورد و انتخاب تصويري جديد و ثبت آن، همان تصوير قبلي در مرورگر نمايش داده ميشد. اين مورد را ميشد با فشردن دكمههاي ctrl+f5 حل كرد (به روز كردن كش مرورگر)، اما اين راه حل اصولي حل اين مشكل نيست. (تصورش را بكنيد كه به كاربر گفته شود پس از هر بار فشردن دكمه ثبت، يكبار هم دكمههاي ctrl+f5 را فشار دهيد!)
راه حلهاي استاندارد غيرفعال كردن كش در ASP.Net هم هيچكدام افاقه نكردند. تركيبي از موارد زير در page_load صفحه تست شدند:
//do not cache...
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;
Response.Cache.SetNoStore();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
اين مشكل به صورت زير حل شد: (يك ستون GridView است)
<asp:TemplateField HeaderText="لوگو">
<ItemTemplate>
<asp:Image ID="Image2" runat="server"
ImageUrl='<%# "pics/"+Eval("filename")+"?uid="+Guid.NewGuid().ToString("N") %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
زمانيكه GridView رندر شود، تصوير ما به صورت زير خواهد بود:
<img id="GridView1__ctl2_Image2" src="pics/123456.PNG?uid=2a2c4247ae264ef49be46a2436ae03c9" border="0" />