folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Rewritepath Postback Problemi



Rewritepath Postback Problemi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KopukKopca
    KopukKopca's avatar
    Kayıt Tarihi: 14/Kasım/2007
    Erkek
    Herkese merhabalar bu seferki yazımız biraz makale biraz sorun çözümü tadında olucak. Bildiğiniz gibi Global.asax dosyası ile ReWritePath işlemini Gökhan Bağcı makale olarak yazdı bende sizlere video olarak sunmuştum. Fakat makalede veya videoda olsun postback problemine karşı önemli bir zaaf vardı. Bizler querystring’lerden kurtulmak adına ReWritePath işlemini projelerimizde uygularken postback olan sayfalarımızda querystring’ler belirlemekteydi. Blog içerisine ilk ReWritePath uygulamasını eklediğimde sayfasının postbak olmasını önlemek (Url bilgisinin bozulmaması için) için UpdatePanel kullanmıştım. Bu işlem kısmen sorunu çözmüş olarak gözüksede aslında sayfamız html kaynak kodlarına baktığımızda yine querystring bilgimiz gözükmekteydi.Örneğin 

    Url bilgisi şu şekilde olan bir sayfanın
    yazilar/hepsini-sil-uygulamasi/123.aspx 

    Form elemanın action özelliğinde
    action="genelyazi.aspx?yaziID=123.aspx" 

    şeklinde yazılmaktadır.Baktığımızda bazılarımız için önemsiz gözükebilir fakat ReWritePath işlemini uygulamamıza dahil ettiğimiz halde bu şekilde bir çıktı almamız bana “Bu ne perhiz bu ne lahana turşusu” Atasözünü hatırlatmadan edemiyor.

    MSDN’i biraz kurcaladıktan sonra sorunu çözdüm.Öncelikle postback işleminin gerçekleşeceği sayfamız içerisinde HttpContext sınıfını kullanarak form elemanımızın action kısmındaki querystring bilgimizi sayfamızın Url bilgisi ile aynı hale getirelim.Bunun için ben FormAction adında bir metod yazdım.

    C# için formAction isimli metodumuz.
    01.public void FormAction()
    02.{
    03.string dosyayolu = Request.RawUrl;
    04.string[] path = dosyayolu.Split(’/’);
    05.if (path.Length == 4)
    06.{
    07.string yol = path[1] + "/" + path[2] + "/" + path[3];
    08.HttpContext.Current.RewritePath(yol, "", "", false);
    09.}
    10.}


    Vb.net için FormAction isimli metodumuz.
    1.Public Sub FormAction()
    2.Dim dosyayolu As String = Request.RawUrl
    3.Dim path As String() = dosyayolu.Split("/")
    4.If path.Length = 4 Then
    5.Dim yol As String = path(1) & "/" & path(2) & "/" & path(3)
    6.HttpContext.Current.RewritePath(yol, "", "", False)
    7.End If
    8.End Sub


    Yukarıdaki metodumuza baktığımızda öncelikle şunu görüyoruz.dosyayolu isimli bir değişken’e sayfamızın uri bilgisi atanmakta. Daha sonra path isimli dizimize ise dosyayolu isimli değişkenimize atanan uri bilgisi “/” karakterine göre bölünerek atanmakta. IF yapısı ile dizimizin uzunluğunun dörde eşit olup olmadığını kontrol ediyoruz. Böylece sayfamızın postback olduğunda dizimizin sayısı dördü geçtiği için tekrar action kısmına bir yazım işlemi gerçekleşmeyecek ve uri bilgisini bozulmuyacak. Yol isimli değişkenimize ise path isimli dizimizin birinci ikinci ve üçüncü indeksleri aralarına “/” gelecek biçimde şekillendirilerek değer olarak verilmekte.Tahmin edersiniz ki birinci indeks’imiz "yazilar" klasoru ikinci indeks’imiz yazımızın başlığı "hepsini-sil-uygulamasi" ve üçüncü indeks’imiz ise yazımızın Id değeri yani "123.aspx". HttpContext sınıfımızın Current özelliğinde yer alan ReWritePath isimli metodumuz sayesinde ise yol değişkenimiz form elemanımızın action özelliğine bizim düzenlediğimiz biçimde yazılmakta. Yapmamız gereken tek şey artık bu metodumuzu sayfamızın Page_Load isimli metodunda cağırmak. Daha sonrasında sayfamızın html kodlarına bakacak olursak form elemanın action özelliğinde şu şekilde bir çıktı görürüz. 

    yazilar/hepsini-sil-uygulamasi/123.aspx

    Birinci sorunuzumuz olan Url bilgisi ile form elemanın action özelliğindeki tutarsızlığı bu şekilde çözdükten sonra artık postback işlemi için geçerli olan sorunumuza bakabiliriz. Şuanda her ne kadar postback sorunumuzunda düzeldiğini sanıyorsanızda yanılıyorsunuz.

    Şimdi yapmamız gereken işlem sayfamızı bir şekilde postback işlemine tabi tutmak bunun için bir buton kullanabiliriz :) Burada yapmamız gereken şey butonun en son işi olarak aynı sayfayı tekrar yüklemesini sağlanmaktır. 

    C# için Button1_Click isimli metodumuz.
    1.protected void Button1_Click(object sender, EventArgs e)
    2.{
    3.//Butonumuz işlemlerini yerine getirdikten sonra tekrar sayfamız yükletilir....
    4.string URL = Request.UrlReferrer.ToString();
    5.Response.Redirect(URL);
    6.}


    Vb.net için Button_Clik isimli metodumuz.
    1.Protected Sub Button1_Clik(ByVal sender As Object, ByVal e As System.EventArgs) HandlesButton1.Clik
    2.Dim URL As String = Request.UrlReferrer.ToString()
    3.Response.Redirect(URL)
    4.End Sub


    Evet arkadaşlar böylece ReWritePath postback problemini bir nebzede olsun çözmüş olduk.Eğer şimdi kendi kendinize şöyle bir soru soruyorsanız peki veritabanımızdan biz bir ID değerine göre verilerimizi çağıyoruz. Bu ID değerini nasıl yakalıyacağız? Bu durumda path isimli dizimizin inceliyecek olursanız orada ID değerimiz üçüncü indeks’de yer almakta formAction metodu içerisinde bu diziden ID değerimizi yakalayabiliriz.Aşağıdaki örnek uygulamalarıda inceleyebilirsiniz tabiki. Ben Recep SELLİ herkese bol kodlamalar.

    Csharp ile hazırlanmış kaynak kod : İndirmek için Tıklayınız 

    VB.Net ile hazırlanmış kaynak kod :İndirmek için Tıklayınız

    2 x pi x re x pi x pi x mi x 7
Toplam Hit: 2043 Toplam Mesaj: 1