Herkese merhabalar;
Uzun zamandir düsünüyordum.Nasil çözerim diye biraz kafa yorduktan sonra çözdüm.
Simdi Problem nedir?
Hepiniz veriTabani kullanip ReWritePath yapmissiniz sitelerinizde fakat bazi sorunlar var. Bunlardan bir Taneside post sorunudur.
Yani siz Tablodan basliklari ve Kimlik numaralarini çekip yeni bir URL olusturdugunuzda ve bu URL ye göre de Global.asax dosyasindada Context.ReWritePath() methodunu kullanarakda sayfayi bastiriyorsunuz..
Ama söyle bir absürt durum meydana geliyor.
diyelim ki bir masterpage ekliniz ve buna bagli iki tane sayfa eklediniz.Default.aspx ve detay.aspx diye neyse default.aspx de bir linkiniz var diyelim (Tikladiginizda VeriTabanindan delphi makalelerini getiriyor)
http:\\deneme.com\delphi-makaleri\1.aspx Global.asax dosyasindada
Context.ReWritePath("~/makaleler/detay.aspx","","KategoriNo=1",true); diye bu sekilde yazdiriyorsunuz.
Buraya kadar hersey normal;
Daha sonra geliyorsunuz.Makaleler klasöründeki detay.aspx sayfasina bir tane buton ekliyorsunuz ve çalistirip tikladiginizda zamzurt bir yol çikiyor URL de ...ve uygulamami çakiyor ne yazikki;
Sorun su URL degisiyor ama masterpagedeki html form nesnesinin action özelligi degismiyor.Yani otomatik olarak URL deki bilgiyi alamiyor.Bu yüzden kaynaklaniyor hata.
URLde ki bilgi degilde söyle bir yol yaziyor mesela(bunu html kod çiktisindan görebilirsiniz)
action="~/makaleler/detay.aspx?KategoriNo=1"
bizde bu masterpagedeki form nesnesinin action özelligine URL deki degeri yazdirdikmiydi sorun çözülecektir.Muhakkak fakli yöntemler vardir ama ben bunu MasterPage sayfanin CodeBehind tarafinda asagiki gibi bir method yazarak hallettim.
protected void FormActionDegistir()
{
HtmlForm HtmlFormNesnesi=new HtmlForm(); // Yeni bir form nesnesi olusturuldu.
HtmlFormNesnesi=this.FindControl("form1") as HtmlForm; form1 nesnesini bul ve Referans degiskene ata
HtmlFormNesnesi.action=Request.RawURL.ToString(); // URL action özelligine aktariliyor.
HtmlFormNesnesi.Dispose(); // Hadi Defol senle isim bitti :)
}
Daha sonra bu methodu masterpage sayfanin page load olayinda çagima isi kaliyor.
su sekilde
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 yordaminda Methodun çagrilmasi */
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.ChangeFormAction();
}
}
Alinti Degildir.
Herkese Çalismalarinda Basarilar Dilerim