Un forum in ASP.Net
Homepage del forum
La homepage del forum si chiamerà forum.aspx e conterrà il menu di navigazione (come tutte le pagine) e l'elenco delle discussioni, ordinate come precedentemente spiegato.
Vediamo il suo aspetto in anteprima:

Guardando le discussioni, notiamo che (per logica di titoli), l'ordine decrescente in cui sono state inserite è il seguente:
- Ultima discussione di esempio...
- Altra discussione di esempio...
- Ti piace questo forum?
Segue il codice completo:
<%@Page Language="VB"%>
<!--#include file="menu.inc"-->
<%@Import Namespace="System.Data.OleDB"%>
<script runat="server">
Private Sub Page_Load
Call Menu
Dim cn = New OleDbConnection(ConfigurationSettings.AppSettings("database"))
cn.Open()
Dim cm = New OleDbCommand("SELECT dom_id, dom_titolo FROM domande ORDER BY dom_aggiornamento DESC", cn)
Dim rs = cm.ExecuteReader()
discussioni.DataSource = rs
discussioni.DataBind()
rs.Close()
cn.Close()
End Sub
</script>
<html>
<head>
<title>Homepage Forum</title>
<meta name="author" content="Luca Ruggiero - Mr.Webmaster">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="forum.css">
</head>
<body>
<h1>Homepage</h1>
<p>
<a href="forum.aspx">Homepage</a> |
<asp:hyperlink id="registrazione" runat="server" /> |
<asp:hyperlink id="login" runat="server" />
</p>
<asp:repeater id="discussioni" runat="server">
<headertemplate><ul></headertemplate>
<itemtemplate>
<li><a href="topic.aspx?id=<%#Container.DataItem("dom_id")%>"><%#Container.DataItem("dom_titolo")%></a></li>
</itemtemplate>
<footertemplate></ul></footertemplate>
</asp:repeater>
</body>
</html>
All'inizio del file importiamo il namespace che ci consentirà di gestire i dati via OleDB ed includiamo un file esterno per la gestione dinamica del menu che analizzeremo a breve.All'interno della pagina costruiamo il menu ed utilizziamo un Repeater per gestire il codice HTML in modo pulito, senza aggiunte che il .NET Framework fa in automatico (come nei casi del DataList o del DataGrid).
Il nostro contenitore di dati verrà popolato dallo script VB.NET che si trova prima dell'apertura del codice HTML che non fa altro che eseguire una query ordinata per il campo data_aggiornamento.
Zoom sul menu di navigazione
Diamo un occhio più approfondito al menu di navigazione:
<p>
<a href="forum.aspx">Homepage</a> |
<asp:hyperlink id="registrazione" runat="server" /> |
<asp:hyperlink id="login" runat="server" />
</p>
Notiamo che il primo è un semplice link HTML che punta al file forum.aspx (ovvero alla homepage), mentre il secondo ed il terzo sono oggetti lato server in cui non specifichiamo direttamente il testo cliccabile ne' la URL, dato che il tutto sarà gestito all'interno del file menu.inc che includeremo in ogni pagina del forum.Segue il codice completo:
<script runat="server">
Private Sub Menu
If IsNumeric(Session("forum")) = False Then
registrazione.Text = "Registrazione"
registrazione.NavigateUrl = "registrazione.aspx"
login.Text = "Login"
login.NavigateUrl = "login.aspx"
Else
registrazione.Text = "Nuova discussione"
registrazione.NavigateUrl = "nuova.aspx"
login.Text = "Logout"
login.NavigateUrl = "logout.aspx"
End If
End Sub
</script>
Creiamo una routine di nome Menu che, come possiamo notare, abbiamo richiamato attraverso una Call anche nel file forum.aspx e che richiameremo ad ogni evento Page_Load di tutte le pagine del forum.A seconda del fatto che la variabile di sessione "forum" sia numerica o meno, impostiamo i link e le relative URL verso la pagina di registrazione e la pagina di login, oppure (se un utente è loggato, quindi la sessione assumerà il valore del suo ID) impostiamo i link e le relative URL verso la pagina di creazione di una nuova discussione e la pagina di logout per disconnettersi dal forum.