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…

Technorati Etiketleri: ,,,,