Çoğu sitede blog 'da karşılaştığımız sayfalama tekniğinde konu başlığı ile aynı olan sayfalrın nasıl yapıldığını düşünmüşüzdür.
Acaba bunlar tek tek sayfa olarakmı kaydediliyor ve nasıl yapılıyor. İşte tam bu sıra .Net teknolojisinin bize sunduğu nimetlerden yararlanmaya geldi.
ASP.NET ile bu tarz sayfaları hazırlamamız okadar kolayki şimdi aşağıda antalacağım yöntem ile sizde şaşıracaksınız.
Peki yazıdan önce bu tarz sayfalar benim ne işime yaracak diye düşünürseniz tabiki herşeyden önce sitenizin arama motorlarında iyi bir yerde indexlenmesinin sağlanmasıdır.
Arama
motorları sayfalarımızı indekslerken bizim adlandırdığımız şekilde
kayıtları tutacak. Buda daha sonra yapılan arama sorgularında daha
başarılı sonuçlarla, daha öncelikli olarak listelenmesini sağlayacaktır.
Not: Arama sonuçlarında her zaman sayfa url’leri başlık ve içeriğe göre daha fazla öncelik sağlar.
Öncelikle veri tabanımızı ve kodlarımızı oluşturmaya başlayalım.

Örnek için bir kaç veri ekleyelim.

Veritabanımızı
oluşturduktan sonra projemize bir adet global.asax dosyası ekliyoruz.
Daha sonra “items” isminde bir klasör ve içerisinede default.aspx
isminde bir sayfa ekliyoruz. Listelemek içinde ana root’taki
Default.aspx sayfasını kullanacağız.Veri tabanımız için ASP.NET Folder menüsünden APP_Data klasörü açıyoruz ve *.mdb mizi buraya koyuyoruz birde dabase imize bağlnamakta bize kolaylık sağlayan yine APS.NET Folder ı olan APP_Code klasörü koyuruz ve buna sağtıklayıp dataset ekleyip veri tabani bağlantılarımızı yapıyoruz.
Sırasıyla Global.asax,
Default.aspx ve /items/default.aspx kodlarını yazmaya başlayalım.
Global.asx dosyamız <%@ Application Language="C#" %>
<script runat="server">
void Application_BeginRequest(object sender, EventArgs e)
{
// İlkeönce işelmleri yapmak istediğimiz sayfanın url bilgisini almalıyız.
// Örnek olarak /items/Firat-Aydinus-Canımızı-Yakti.html gibi.
string filePath = Request.RawUrl;
// IndexOf fonksiyonu ile almış olduğumuz url içinde items klasörünü arayalım.
// Böle bir kontrol yapmadığımız takdirde tüm dosyalarda rewriter işlemi yapmak isteyecektir.
if (filePath.IndexOf("/items/") != -1)
{
// Bu kontrolude geçtikten uzantıyı belitritiyoruz burda ben html olarak belirtim.
// Eğer istersen bu uzantıyı istediğimiz gibi değiştirebiliriz.
if (System.IO.Path.GetExtension(filePath) == ".html")
{
// Bu kontrolüde aştıktansonra verimizi çekebilmemiz için gerekli olan ID yayya ulaşmamız gerekli.
//Split fonksiyonu ile url lemizi dizi haline çevirip ID değerine ulaşmamız gerekli.
string[] spltUrl = System.IO.Path.GetFileName(filePath).Split('-');
// Aşağıdaki işlemler ilk önce gerçek sayfa yolunu, daha sonraki parametre ile ID değerini gönderiyoruz.
Context.RewritePath("~/items/default.aspx", "", "id=" + spltUrl[0], true);
}
}
}
</script>
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<ItemTemplate>
<li><asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# ReWriteURL(Eval("idItem").ToString(), Eval("itemHead").ToString()) %>'><%#Eval("itemHead")%></asp:HyperLink></li>
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
TypeName="DataSet1TableAdapters.tblItemsTableAdapter" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="Original_idItem" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
<asp:Parameter Name="Original_idItem" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string ReWriteURL(string _id, string _head)
{
string _strTemp = string.Empty;
//Bu fonksiyon ile kayıtlardan gelen başlık içerisinde bulunan
// ve geçerli olmayan karaterleri tarayıcıların tanıya bilmesi
// url lerimizin daha anlamlı hale gelmesi için gerekli replace
// işlemlerini yapacaktır.
_strTemp = _head.ToLower();
_strTemp = _strTemp.Replace("-", "");
_strTemp = _strTemp.Replace(" ", "-");
_strTemp = _strTemp.Replace("ç", "c");
_strTemp = _strTemp.Replace("ğ", "g");
_strTemp = _strTemp.Replace("ı", "i");
_strTemp = _strTemp.Replace("ö", "o");
_strTemp = _strTemp.Replace("ş", "s");
_strTemp = _strTemp.Replace("ü", "u");
_strTemp = _strTemp.Replace("\"", "");
_strTemp = _strTemp.Replace("/", "");
_strTemp = _strTemp.Replace("(", "");
_strTemp = _strTemp.Replace(")", "");
_strTemp = _strTemp.Replace("{", "");
_strTemp = _strTemp.Replace("}", "");
_strTemp = _strTemp.Replace("%", "");
_strTemp = _strTemp.Replace("&", "");
_strTemp = _strTemp.Replace("+", "");
_strTemp = _strTemp.Replace(".", "-");
_strTemp = _strTemp.Replace("?", "");
_strTemp = _strTemp.Replace(",", "");
return "items/" + _id + "-" + _strTemp + ".html";
}
}
items/default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="items_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<ItemTemplate>
Item ID = <%#Eval("idItem")%><br />
<br />
Item Head = <%#Eval("itemHead")%><br />
<br />
Item Detail = <%#Eval("itemText")%><br />
<br />
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="GetDataBy"
TypeName="DataSet1TableAdapters.tblItemsTableAdapter" UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="Original_idItem" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
<asp:Parameter Name="Original_idItem" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="idItem" QueryStringField="id" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Şimdi sırasıyla ekran görüntülerimizi inceleyiniz.


Anlatmış olduğum konuyu dan birşey anlmadığınızı düşünürseniz aşağıda
örnek dosyalarıda koydum indirip sisteminizde deneye bilirsiniz.
Burada anlatıklarımı eğer ilk defa bu işe başlıyorsanız anlamaya bilirsiniz.
Bu Dosyayı İndirmek İçin Tıklayınız (rewriterPath.rar (16,86 KB))Engin TERZİ