Merhaba arkadaşlar bu yazımızda malesef yine bir bug dan bahsediyor olucaz.Neyse ki bunundan üstüsinden gelinebiliyor.sizin de bildiğiniz gibi url rewrite yaptığımız sayfalarımızda postback yapıldığında yani bir butona tıklanıldığında adres satırımız url rewrite yapılmadan önceki yani orjinal halini alıyor.Böyle olunca da adres satırımız klasik bir adres haline geliyor.Bu sorunun nedeni ise Asp.net içerisinde bulunan form kontrolünün action özelliğinin render edilememesi.
Bundan Dolayı codebehind tarafında form kontrolümüze ne kadar action özelliği katmak istersek katalım malesef bu işe yaramıycaktır.Ta ki biz yeni bir form kontrolü yapana dek.MSDN sayfasında da bir örneğine rastalayacağınız üzere custom form oluşturalım öncelikle.İçeriğimiz şöyle olmalı
Â
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4: using System.Web;
5: using System.Web.UI;
6:Â
7: namespace ExForm
8: {
9: public class Form : System.Web.UI.HtmlControls.HtmlForm
10: {
11: protected override void RenderAttributes(HtmlTextWriter writer)
12: {
13: writer.WriteAttribute("name", this.Name);
14: base.Attributes.Remove("name");
15:Â
16: writer.WriteAttribute("method", this.Method);
17: base.Attributes.Remove("method");
18:Â
19: this.Attributes.Render(writer);
20:Â
21: base.Attributes.Remove("action");
22:Â
23: if (base.ID != null)
24: writer.WriteAttribute("id", base.ClientID);
25: }
26: }
27: }
Böylece Html form kontrolünden kendimize miraz alarak yeni bir form kontrolü oluşturduk.Şimdi ise bunu sayfamıza eski form kontrolünün yerine ekliycez.
Tabi bu eklemeyi yapmak için öncelikle oluşturduğumuz custom form kontrolümüze ait olan dll dosyamızı projemize referans olarak ekleyelim.
Referans olarak ekledikten sonra eski form kontrolü bulunan bir sayfayı açalım ve başına şu ifadeyi ekleyelim
1: <%@ Register TagPrefix="ex" Namespace="ExForm" Assembly="ExForm" %>
Bu eklemeyi yaptıktan sonra eski form kontrolünü silelim ve yerine;
1: <ex:Form id="form1" runat="server" action="post"></ex:Form>
Yeni form kontrolümüze ait olan ifadeyi ekleylim.
Codebehind tarafına geçerek son olarak Page_Load event’ımızın altına şu ifadeyi ekleyelim
1: form1.Attributes.Add("action", Request.RawUrl);
İşte bu kadar.Artık postback yapılan sayfalarda adres satırımız değişmiycek.
Örnek Site: http://www.tekstil-firmalari.net
Yeni Form kontrolümüzü buradan indirebilirsiniz.
Örnek Proje ve Kaynak Kodlarına ise buradan erişebilirsiniz.
Hepinize sorunsuz,bug’sız ve net’li günler…





Üstad güzel bir anlatım olmuş ama atladığın bir kaç nokta olmalı. Çünkü uygulamayı yaptım referans olarak ekledim. Sayfanın başınada eklenecek olan satırı ekledim. Ama bir problem var. Form öğesinin yerine yazılacak olan kısmı çıkmıyor. Dedim herhalde benden kaynaklı bir problem senin yaptığını indirdim ancak hala aynı problem devam ediyor. Konuyu bir daha gözden geçirebilirmisin??
Orada çıkmayabilir elinizle manuel olarak yazın yani intellisense özelliğini kullanmadan yazın.Sorunsuz çalışıyor eminim çünkü örnek site verdim.O site de kullanıldı bu örnek.
Haklı olabilirsiniz ancak elle denediğimde de Hata alıyorum.
HATA: Element ‘form’ is not a know element. This can occur if there is a compilation error in the web site.
Hata bu. Dediğiniz gibi yaptım ancak HATA aldım. İyi günler.
Tamam o zaman şöyle yapalım;eklemeye çalıştığınız form kontrolünüze ait ifadeyi buraya yazın,kontrol edelim.
yaptıklarımı sırayla buraya yazıyorum.
1- Uygulamayı yazdım ve dll olarak ekledim. Daha sonra hata olduğunu sandım ve sizin yaptığınız uygulamayı indirdim.
2- DLL dosyasını referans olarak ekledikten sonra şu kod satırını ekledim
3- Form kontrolünün yerine yazılacak kodu yazmaya çalıştığımda ise hata vermektedir.
Yaptığım iÅŸlemler bu kadardır. İyi Günler. KOLAY GELSİN…
Örnek proje ve kaynak kodlarını yazıma ekledim.İndirip deneyebilirsiniz.
masterpage kullanılan sayfada masterpagete yapılmış bölüm görünmüyor. bu sorunu nasıl hallederiz ?
benim sorularım olacak yardımcı olursanız sevinirim :
1. Öncelikle oluşturulan custom form ne ?
web form mu class mıdır nedir ?
2. Eski formun yerine yenisini ekleme meselesinden ve ustom form kontrolümüze ait olan dll dosyamızı projemize referans olarak ekleyelim derken inanın hiç birşey anlamadım. dll dosyası nerde mesela ?
3. Bundan sonraki kısımları da hiç anlamadım daha acıklayıcı olursanız biz de istifade ederiz.
Şimdiden teşekkürler
iyi günler ben sizin örnek projenizi indirdim derledim ama derlerken aşağıdaki 2 hatayı veriyor hiç bir değişiklik de yapmadım nedeni ne olabilir ?
Yardımlarınız için teşekkürler, IIS 7 url rewrite module üzerinden post back problemini bi şekilde çözmem lazım çok araştırma yaptım ama suan bulamadım çözümünü :/
Error 2 Bilinmeyen sunucu etiketi: ‘ex:Form’. C:\Users\Hp\Desktop\Yeni Klasör (2)\ExForm-Source\WebSite\Default.aspx 10
Error 1 ‘ExForm’ dosyasını veya derlemesini ya da bağımlılıklarından birini yükleyemedi. Sistem belirtilen dosyayı bulamıyor. C:\Users\Hp\Desktop\Yeni Klasör (2)\ExForm-Source\WebSite\Default.aspx 2
Bu hata bin klasörü içerisinde bulunan dll dosyamızı bulunmadığında ortaya çıkar.Dolayısı ile gerekli dll dosyamızı yani ExForm.dll dosyamızı bin klasörüne atmalıyız.Şimdi projeyi indirip derlediğimde bir sorunla karşılaşmadım.
Ama dediÄŸim gibi bu formda da yine karşımıza bug lar çıkıyor.Dolayısı ile bloÄŸumda bulunan Url rewrite 2 baÅŸlıklı konuyu inceleyip orada anlatılan tekniÄŸi kullanırsanız bu tür sorunlarla karşılaÅŸmıycaksınız.Bu konu sadece url rewrite’ın nasıl iÅŸlediÄŸini göstermek amaçlı yazılmıştır.
Diğer yazımda herşey çok basit.Görüşmek üzere arkadaşlar
Uğur hocam 10 numara makaleler ne diyeyim. Eline emeğine sağlık.
selami arkadaşın dediği gibi tekil sayfalarda bu form değeri işe yarasada MasterPagelerde sorun çözümsüz kalıyor. Masterpage için sorunu nasıl çözebiliriz.
form1.Attributes.Add(”action”, Request.RawUrl.ToString());
Yukaridaki bilgiler güzel.Fakat MasterPage icerisinde yukarıda belirttigim Attiributes ekini yazarsaniz hic bir sorun kalmıyacagını gorursunuz.
Bu arada konu güzel.
Oldukca basarili bir site hazirlamissiniz. Sanirim wordpress kullandiniz. Basarilar dilerim.
Love the new appear. I enjoyed this great article. Thanks for the excellent work.