Sayfayı Yazdır | Pencereyi Kapat

ReWritePath Yaparken Form Action Özelliğinide Deği

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: C# & ASP.NET
Forum Tanımlaması: C# ve ASP.NET ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=1932
Tarih: 03.Eylül.2025 Saat 04:27


Konu: ReWritePath Yaparken Form Action Özelliğinide Deği
Mesajı Yazan: turknetyazilim
Konu: ReWritePath Yaparken Form Action Özelliğinide Deği
Mesaj Tarihi: 20.Haziran.2010 Saat 16:13

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



Sayfayı Yazdır | Pencereyi Kapat