none
her sayfaya özel tasarım ve içeriği veritabanından çekmek... RRS feed

  • Soru

  • bu nasıl yapılır?

    (bkz; örnek site)

    Ben şu şekilde bir çalışma yaptım:

    MasterPage.master:

    <div class="menu_box">
                        <asp:Repeater ID="rptHeadMenu" runat="server">
                            <HeaderTemplate>
                                <ul class="headermenu">
                            </HeaderTemplate>
                            <ItemTemplate>
                                <li><a href="<%# Eval("sUrl") %>">
                                    <%# Eval("sTitle") %></a></li>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <li>|</li>
                            </SeparatorTemplate>
                            <FooterTemplate>
                                </ul>
                            </FooterTemplate>
                        </asp:Repeater>
                    </div>

    MasterPage.master.cs:

    SqlConnection conn;
        SqlCommand cmd;
        SqlDataReader reader;
        string connStr = ConfigurationManager.ConnectionStrings["CS"].ConnectionString;
        string sCid = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetpTitle();
            }
        }
    
        void GetpTitle()
        {
            conn = new SqlConnection(connStr);
            cmd = new SqlCommand("SELECT * FROM Pages", conn);
    
            try
            {
                conn.Open();
                reader = cmd.ExecuteReader();
                rptHeadMenu.DataSource = reader;
                rptFootMenu.DataSource = reader;
                rptHeadMenu.DataBind();
                rptFootMenu.DataBind();
                reader.Close();
            }
            catch (Exception ex)
            {
                Response.Write("Veri listelenemedi, bir hata oluştu!!<br/>" + ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

    Default.aspx:

    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server">
        <asp:Label ID="lblpTitle" runat="server" Text='<%# Eval("pTitle") %>'></asp:Label>
    </asp:Content>

    Default.aspx.cs:

    SqlConnection conn;
        SqlCommand cmd;
        SqlDataReader reader;
        string connStr = ConfigurationManager.ConnectionStrings["CS"].ConnectionString;
        string s_ID = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetData();
            }
        }
    
        void GetData()
        {
            s_ID = Request.QueryString["s_id"];
    
            conn = new SqlConnection(connStr);
            cmd = new SqlCommand("select * from Pages where sID=" + s_ID, conn);
            cmd.Parameters.Add("@sID", System.Data.SqlDbType.Int);
            cmd.Parameters["@sID"].Value = s_ID;
    
            string labelTitle = string.Empty;
    
            try
            {
                conn.Open();
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    labelTitle = reader["pTitle"].ToString();
    
                    lblpTitle.Text = labelTitle;
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Response.Write("Veri listelenemedi, bir hata oluştu!!<br/>" + ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }

    Veritabanı:

    USE [ozsoygardenlife]
    GO
    /****** Object:  Table [dbo].[Pages]    Script Date: 10/01/2012 16:40:08 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Pages](
    	[sID] [int] IDENTITY(1,1) NOT NULL,
    	[sTitle] [nvarchar](75) NULL,
    	[sContent] [nvarchar](max) NULL,
    	[sUrl] [nvarchar](max) NULL,
    	[pTitle] [nvarchar](90) NULL,
     CONSTRAINT [PK_Pages] PRIMARY KEY CLUSTERED 
    (
    	[sID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[Items]    Script Date: 10/01/2012 16:40:08 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Items](
    	[itemID] [int] IDENTITY(1,1) NOT NULL,
    	[itemUrl] [nvarchar](max) NULL,
    	[sID] [int] NULL,
     CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED 
    (
    	[itemID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[FotoGaleri]    Script Date: 10/01/2012 16:40:08 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[FotoGaleri](
    	[gID] [int] IDENTITY(1,1) NOT NULL,
    	[imgURL] [nvarchar](max) NULL,
    	[imgTitle] [nvarchar](50) NULL,
     CONSTRAINT [PK_Galeri] PRIMARY KEY CLUSTERED 
    (
    	[gID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    

    üzerinde çalışıyorum fakat ben ana tasarıma sadık kalarak ama farklı html ve css kodlarını da diğer sayfalarda farklı içerik gelecek şekilde olması gerekiyor. örneğin Default.aspx?s_id=3 dediğinde Galeri sayfası ve oradaki resimler gelmeli...hatta burada da bilmediğim bir şey var Galeri sayfasında fotoları sıralamak ve yönetici panelden eklemesi gerekiyor. Bunun için Ayrı bir tablo oluşturdum...fakat o tabloyu id ile gelen bir sayfaya nasıl çağırabilirim? teşekkürler...


    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.

    1 Ekim 2012 Pazartesi 13:48

Yanıtlar

  • açılmasını istediğin sayfanınb buton eventında da yapabilirsin veya eğre kontrol master page üzerindeyse C# tarafında o kontrole ulaşarak da yapabilirsin,bunuda sayfanın load eventında yapabilirsin snaırım,Şu Şekilde bir örnek işine yararmı bir dene istersen

    protected void Page_Load(object sender, EventArgs e)
        {
            HtmlGenericControl solKisim = (HtmlGenericControl)Master.FindControl("solKisim");
            solKisim.Style.Add("Display", "none");

            Label lbl = (HtmlGenericControl)Master.FindControl("masterLabel");
            lbl.Text = "sayfa.org";

        }



    1 Ekim 2012 Pazartesi 15:35

Tüm Yanıtlar

  • ana tasarıma sadık kalarak her sayfada farklı birşeyler yapmak istiyorsan ilk olarak master page içinde master page kullanabilirsin,sonra her sayfa için ayrı css dosyası da kullanabilirsin,başka alternatifler de oalbilir,benim fikrime göre,yada diğer sayfaların child window olarak da açılmasını sağlayabilirsin.. 
    1 Ekim 2012 Pazartesi 14:22
  • yok o şekilde değil sadece içerik değişecek ancak verdiğim örnek site üzerinden konuşuyorum orada gördüğünüz gibi genel tasarımlar değişmiyor standart masterpage gibi aslında benim sorum şu orada değişen sadece bir ya da bir iki div var id lere göre dinamik site mantığı ile veritabanından çekmesi gerekiyor...

    toparlayacak olursak işin aslı şudur ben nasıl veritabanından her sayfaya özel içerik çekebilirim? yukarıda örnek siteyi verdim her sayfada farklı içerik görünüyor bunun en basit çözümü her sayfayı yine ayrı ayrı masterpage den çağırıp menü deki öğelere (Anasayfa, Galeri, vs.), örneğin; id leri elle vererek yapılır ancak bu sağlıklı bir yöntem değil...çünkü bunun bir de yönetim aneli olacak adam içeriği istediğii gibi değiştirmek isteyecektir...o zaman id yi nasıl atacak? resimleri nasıl atacak? değil mi?


    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.

    1 Ekim 2012 Pazartesi 14:54
  • O zaman C# tarafında içeriğin yayınlanacağı kontrole ulaşarak yapabilirsin,en basitinden hakkımızda sayfasına geldiğinde tecbox içeriğini değiştirebilirsin,yani C# tarafında hakkımıza sayfasına gelindiğinde kod tarafında yakalarsın ve divin içeriğini değiştireblirsin.

    1 Ekim 2012 Pazartesi 15:24
  • nested olayını biliyorum da bu sayfa değiştiğinde içeriği de değiştirmeyi biliyorum yani düz yazı göndermeyi biliyorum siz orada "Proje Hakkında" sayfasına bakar mısınız? mesela içerikte çeşitli resimler var ben onları nasıl getireceğimi bilmiyorum...hepsini yeri değişik... ve diğer sayfalarda da bu değişik...

    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.

    1 Ekim 2012 Pazartesi 15:28
  • açılmasını istediğin sayfanınb buton eventında da yapabilirsin veya eğre kontrol master page üzerindeyse C# tarafında o kontrole ulaşarak da yapabilirsin,bunuda sayfanın load eventında yapabilirsin snaırım,Şu Şekilde bir örnek işine yararmı bir dene istersen

    protected void Page_Load(object sender, EventArgs e)
        {
            HtmlGenericControl solKisim = (HtmlGenericControl)Master.FindControl("solKisim");
            solKisim.Style.Add("Display", "none");

            Label lbl = (HtmlGenericControl)Master.FindControl("masterLabel");
            lbl.Text = "sayfa.org";

        }



    1 Ekim 2012 Pazartesi 15:35
  • ya kafam çok karıştı yaa bu işi adam gibi bilen yok mu şu memlekette? var aslında da buraya yazma zahmetinde bulunmuyorlar onlar da yaa... :(

    şimdi bak bu kontrollere ulaşıp ben içlerine css mi yazabiliyorum? bir de ben veritabaına ilgili sütunlara direk kodları yapıştıramıyorum? örneğin Repeater ve içinde html tag larıyla ve css classlarıyla id leri ile birlikte yapamıyormuyum? Access de oluyor...


    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.


    2 Ekim 2012 Salı 08:32
  • bu konuyu sileceğim ya, sende mesajlarını siler misin? sitemim sana değildi bu arada genel bir tavır bu işin eğitmenlerinden bile bunu adam gibi öğrenemiyorsun...sonuna kadar ilgilendiğin için sana da ayrıca teşekkür ederim yilmazbozaci...

    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.



    2 Ekim 2012 Salı 12:03
  • C# veya VB tarafında da ulaşabilrisn istediğin kontrole,css tasarım tarafı,ama sen açılan sayfada belli kontrollerin içeriğinin değişmesini istiyorsun,diyelimki bir div var ve bu Div in içeriği her sayfada farklı olsun bunu C# Tarafında O divin İD sine ulaşarak yapabilirsin,Ancak benim anladığım kadarıyla Bu şekilde Yardımcı olmaya Çalışıyorum,Ben Kurstta Bi dünya Borca Girdiğim Halde Alamadım O Dediğini Herşeyi Kendi İMkanalrımla Sağolsun Forumlardaki Özellikle MSDN Forumlarındaki Arkadaşlar ve Hocalarım Sayesinde İlerletmeye Çalışıyorum,Facebookdan Ekle beni de direk projene bakayım Belki Bi Faydası Olur,Sonra Da Sorunu ve Cevabı burdan Yazarız Herkese de Faydası olur...
    5 Ekim 2012 Cuma 10:21
  • zaten bu kadarına bile kendi çabalarımla geldim. neyse....

    harikasın, teşekkürler... ;) eve döndüğümde eklerim, konuşuruz...iş yerinde yasak facebook...


    Plies - See Nann Nigga

    Scope Piskopos - Ben 46 Raporlu Bir Deliyim

    Ben başarısız olmadım, sadece işin bu şekilde yapılmayacağının bir çok yolunu buldum ve işin nasıl yapılacağına da bir çok defa yaklaştım.


    6 Ekim 2012 Cumartesi 08:28
  • repeater kullanmak yerine html kısmında 

      <%foreach ()
          {%>

    <%=item.İcerikBaslik%>

    <%} %>

    ve aynı şekilde if kullanarak veritabanından gerekli içeriği çekebilirsin.

    repeaterdan daha kolay bir şekilde if kontrolünün içerisinde kullanmak istediğin div leri tanımlamış olursun.

    doğru anlıyorsam bu sayede.

    1 sayfa içerisinde kullanacağın 1 döngü ve bir kaç if ile 1+5 sayfa içerik eklemiş olursun.. 

    9 Ekim 2012 Salı 16:22