Skip to content

ASP.NET’te Sayfa Yönlendirme

Merhabalar, kendimi nispeten nadasa çektiğim bir yarıyıl tatilinden sonra tekrar bir şeyler karalayayım dedim.

ASP.NET ile uygulama geliştirilirken en çok kullanılan eylem şüphesiz ki sayfalar arası dolaşmadır. Özünde basit gibi de görünse bu yönlendirme işlerinde kullanılan yöntemler oldukça kritiktir.

Daha önceden konuya aşina olanlar da muhakkak biliyorlardır, yeni sayfaya geçiş için en çok kullanılan yöntem Response.Redirect’dir. Peki bu yöntem her durumda uygun mu?

Response.Redirect yönlendirme yaparken, bu durumdan hem tarayıcıyı hem de sunucuyu bilgilendirir. Bu da demek oluyor ki, hem tarayıcının adres satırında yeni adres yer alacak, hem de sunucudan yeni adresteki sayfa istenecek. Buraya kadar her şey normal. Lakin bazen öyle durumlar olur ki, bir sayfa, kendinden önceki sayfanın başlattığı bir sürecin devamı olur. Birden çok aşamalı kayıt formlarını buna örnek verebiliriz. Bu tarz durumlardan her aşamanın adres çubuğunda gözükmesi işimize gelmeyebilir. İşte böyle zamanlarda Response.Redirect kullanılamaz.

Bizim amacımız browser üzerinde yönlendirme işleminin değişiklik yapmasını engellemekse işlemimizi sadece sunucu tarafında yapmamız gerekir. Bunun için de Server.Transfer metodu kullanılır.Bu metot adres çubuğunu ellemez, sadece sunucudan yeni sayfayı getirir. Ayrıca yeni sayfadan önceki sayfanın kaynaklarına ulaşma imkanı da sağlar kod içinde. (Ayrıntısına başka bir yazıda değinirim.)

Bu iki yöntem için de değinilmesi gereken en önemli nokta ikisinin de sayfanın işlemini tamamlamasını beklemeden yönlendirme işlemini yapmasıdır. Bu da bu iki yöntemin ThreadAbortException fırlatmasına neden olur. Try catch bloklarıyla dahi zaman zaman adam gibi yakalanamayan bu istisna,bazı çevrelerce bug olarak da değerlendiriliyor, uygulamada tutarsızlıklara neden olabilir.

İşte bu tutarsızlıkların ortadan kaldırılması için Response.Redirect metoduna ikinci parametre olarak “false” verilmelidir. Bu parametre thread’in tamamlanmasından sonra sayfanın yönlendirilmesini sağlar.

Server.Transfer için ise durum biraz daha farklı, bu istisnanın oluşmaması için başka bir metot kullanmak gerekir: Server.Execute. Belirtmem gerekir ki Execute metodu bir önceki sayfayı da ekrana yansıtır yeni sayfa ile birlikte ki, bu bazen istenmeyen sonuçlar doğurabilir. Bunun olmaması için biraz hülle ile Exception yakalandıktan sonra boş bir catch bloğuna yönlendirilir.

Published in.NETASP.NETBeni Kategorize Etme

Be First to Comment

Leave a Reply