ASP.NET 4.0 ile birlikte gelen System.Web.Routing namespace i ile artık URL Rewrite işlemlerini yaparken ne web.config dosyasının dinamik düzenlemesine gerek kalıyor nede reqular expressionlar ile uğraşmamıza Microsoft bizi düşünüp gerçekten olayı çok çok basite indirgemiş ancak ne varki; ne yaparsanız yapın URL Rewrite işlemlerinin hepsinde tarayıcılara bağlı olarak html nesnelerinin path gerektiren attributelarına atanan değerler tarayıcı üzerindeki url yi baz alarak düzenleneceğinden resimlerinizin ve css dosyalarınızın gösteriminde sorunlar oluşacaktır.
bu sorunun çözümü için <img tagındaki verilere genel olarak runat="server" ifadesi eklenir src attribute'nun başınada ~/ ifadesi eklenir
Eski Hali(Not Working): <img alt="" src="images/kirmizialt.gif" style="width: 32px; height: 6px" />
Yeni Hali(Working): <img alt="" src="~/images/kirmizialt.gif" style="width: 32px; height: 6px" runat="server" />
Bu şekilde image dosyalarındaki problemler çözümlensede bazı noktalarda örneğin bir table hücresine backgorund-image tanımladığı gibi bir durumda W3 strandartlarına uyup background-image i style attribute'u içerisinde tanımlamak isterseniz bu yöntem işe yaramayacaktır. Bunun yerine ResolveUrl fonksiyonunu kullanabiliriz.
Örneğin;
Eski hali(Not Working): <td style="background-image:url('images/kirmiziback.gif');" class="baslik_beyaz">
Şeklinde tanımlanan bir hücrede url nerde olursa olsun(yemektarifleri/avetleri) gibi bir dizin altında images klasörünü arayacağından doğru sonuç vermeyecektir.
Bunun yerine;
Yeni hali(Working):
<td style="background-image:url(<%= Page.ResolveUrl("~")%>images/kirmiziback.gif);" class="baslik_beyaz">
Şeklinde tanımlayarak <%= Page.ResolveUrl("~")%> kodunu image url'sinin başına getirip sorunun çözülmesini sağlayabilirsiniz. Genellikle MasterPage kullanımlarında ortaya çıkan bu durumlarda ResolveUrl methodu çok işinize yarayacaktır.
Kolay gelsin...