Herkese merhabalar;
Uzun zamandır düşünüyordum.Nasıl çözerim diye biraz kafa yorduktan sonra çözdüm. Şimdi Problem nedir?
Hepiniz veriTabanı kullanıp ReWritePath yapmışsınız sitelerinizde fakat bazı sorunlar var. Bunlardan bir Taneside post sorunudur.
Yani siz Tablodan başlıkları ve Kimlik numaralarını çekip yeni bir URL oluşturduğunuzda ve bu URL ye göre de Global.asax dosyasındada Context.ReWritePath() methodunu kullanarakda sayfayı bastırıyorsunuz.. Ama şöyle bir absürt durum meydana geliyor. diyelim ki bir masterpage ekliniz ve buna bağlı iki tane sayfa eklediniz.Default.aspx ve detay.aspx diye neyse default.aspx de bir linkiniz var diyelim (Tıkladığınızda VeriTabanından delphi makalelerini getiriyor) http:\\deneme.com\delphi-makaleri\1.aspx Global.asax dosyasındada Context.ReWritePath("~/makaleler/detay.aspx","","KategoriNo=1",true); diye bu şekilde yazdırıyorsunuz. Buraya kadar herşey normal;
Daha sonra geliyorsunuz.Makaleler klasöründeki detay.aspx sayfasına bir tane buton ekliyorsunuz ve çalıştırıp tıkladığınızda zamzurt bir yol çıkıyor URL de ...ve uygulamamı çakıyor ne yazıkki; Sorun şu URL değişiyor ama masterpagedeki html form nesnesinin action özelliği değişmiyor.Yani otomatik olarak URL deki bilgiyi alamıyor.Bu yüzden kaynaklanıyor hata. URLde ki bilgi değilde şöyle bir yol yazıyor mesela(bunu html kod çıktısından görebilirsiniz)
action="~/makaleler/detay.aspx?KategoriNo=1" bizde bu masterpagedeki form nesnesinin action özelliğine URL deki değeri yazdırdıkmıydı sorun çözülecektir.Muhakkak faklı yöntemler vardır ama ben bunu MasterPage sayfanın CodeBehind tarafında aşağıki gibi bir method yazarak hallettim.
protected void FormActionDegistir() { HtmlForm HtmlFormNesnesi=new HtmlForm(); // Yeni bir form nesnesi oluşturuldu. HtmlFormNesnesi=this.FindControl("form1") as HtmlForm; form1 nesnesini bul ve Referans değişkene ata HtmlFormNesnesi.action=Request.RawURL.ToString(); // URL action özelliğine aktarılıyor. HtmlFormNesnesi.Dispose(); // Hadi Defol senle işim bitti :) }
Daha sonra bu methodu masterpage sayfanın page load olayında çağıma işi kalıyor. şu şekilde
if (!page.ispostback) { this.FormActionDegistir(); }
========================================================
protected void ChangeFormAction()
{
/*1. Yöntem */
HtmlForm formNesnesi = new HtmlForm();
formNesnesi = this.FindControl("form1") as HtmlForm;
formNesnesi.Action = Request.RawUrl.ToString();
formNesnesi.Dispose();
}
protected void ChangeFormAction()
{
/*2. Yöntem */
this.Page.Form.Action = Request.RawUrl.ToString();
}
/*Page_Load yordamında Methodun çağrılması */
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.ChangeFormAction();
}
} Bu Kod İsmail Kocacan tarafından geliştirilmiştir.Alıntı Değildir. Herkese Çalışmalarında Başarılar Dilerim
|