Ein Gästebuch Helper

Mit dem Gästebuch Helfer kann man schnell und einfach ein eigenes Gästebuch in seine HTML Seite einbauen. Man benötigt lediglich den unten im Sourcecode vorhandenen Helper und speichert diesen in das Verzeichnis App_Code unter dem Namen GuestbookHelper.cshtml.

Dann gibt es folgende Schritte der Konfiguration:

Datenbank Initialisieren

In der Datei GuestbookHelper.cshtml den Datenbank Namen eintragen. Heißt z.B. die Datenbank StarterSite.sdf so ist der Name der einzutragen ist, StarterSite.

change-database-name

Das ist im Prinzip schon die Konfiguration. Nun muss man noch in die _AppStart.cshtml die Initialisierung aufrufen. Hier ein Beispiel wie das aussieht:

    1: @{
    2:     GuestbookHelper.InitializeDatabase();
    3: }

Gästebuch Einträge zeigen

Die Seite die Gästebuch Einträge zeigen soll ruft den Helper einfach nur per

 @GuestbookHelper.ShowEntries()

auf. Es gibt für den Namen, das Datum und den eigentlichen Eintrag jeweils eine CSS Klasse namens guestbook-entry-from, guestbook-entry-created und guestbook-entry-entry, welche man fürs eigene Styling benutzen kann. Hier ein Beispiel der Benutzung:

    1: @{  
    2:     Layout = "~/_SiteLayout.cshtml";
    3:     Page.Title = "Welcome to my Web Site!";
    4: }
    5:  
    6: <h3>Mein Gästebuch</h3>
    7: @GuestbookHelper.ShowEntries()

Gästebuch Einträge erstellen

Zu guter Letzt noch die Form die den Eintrag ins Gästebuch erstellt. Hier heißt der Helper

 @GuestbookHelper.ShowForm()

Auch die Form hat CSS Klassen mit den Namen guestbook-form-from und guestbook-form-entry. Die Form postet an die eigene Webseite zurück. Diese benötigt nun noch den Helper um die Request Variablen aus dem Postback auszulesen. Die Funktion heißt hier

 GuestbookHelper.CreateEntryFromPost()

Das ist auch schon alles. Ein Beispiel der Form Anwendung in einer Seite:

    1: @{
    2:     Layout = "~/_SiteLayout.cshtml";
    3:     Page.Title = "About My Site";
    4:     
    5:     GuestbookHelper.CreateEntryFromPost();
    6:     
    7:     if( IsPost )
    8:     {
    9:         Response.Redirect(@Href("~/Default"));
   10:     }
   11: }
   12:  
   13: @GuestbookHelper.ShowForm()

Das war es schon. Unten ist der Sourcecode für den GuestbookHelper.

How-To Video

Source Code

    1: @functions
    2: {
    3:     public const string DatabaseName = "[DATENBANK-NAME-HIER-EINGEBEN]";
    4:     public const string TableGuestbook = "Guestbook";
    5:     
    6:     public static string Result = string.Empty;
    7:  
    8:     public static void InitializeDatabase()
    9:     {
   10:         var database = Database.Open(DatabaseName);
   11:         
   12:         if( !CheckIfTableExists(database, TableGuestbook) )
   13:         {
   14:             CreateGuestbookTable(database);
   15:         }        
   16:         
   17:         database.Close();
   18:     }
   19:  
   20:     public static void CreateEntryFromPost()
   21:     {
   22:         if (IsPost)
   23:         {
   24:             var name = Request["name"];
   25:             if (name.IsEmpty())
   26:             {
   27:                 ModelState.AddError("name", "Du musst deinen Namen angeben.");
   28:             }
   29:  
   30:             var entry = Request["entry"];
   31:             if (entry.IsEmpty())
   32:             {
   33:                 ModelState.AddError("entry", "Du musst etwas schreiben.");
   34:             }
   35:  
   36:             if (ModelState.IsValid)
   37:             {
   38:                 var database = Database.Open(DatabaseName);
   39:                 var insert = string.Format( "INSERT INTO {0} (Name, Entry, Created) VALUES (@0, @1, @2)", TableGuestbook );
   40:                 database.Execute(insert, name, entry, DateTime.Now);
   41:                 database.Close();
   42:             }
   43:         }
   44:     }    
   45:     
   46:     private static bool CheckIfTableExists(Database database, string tableName)
   47:     {
   48:         var result = database.QuerySingle("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @0", tableName);
   49:         return result != null;
   50:     }
   51:     
   52:     private static void CreateGuestbookTable(Database database)
   53:     {
   54:         string table = string.Format("CREATE TABLE {0} ( [Name] nvarchar(100) not null, [Entry] nvarchar(4000) not null, [Created] datetime not null)", TableGuestbook);
   55:         database.Execute(table, new object[0]);
   56:     }
   57: }
   58:  
   59: @helper ShowEntries( int numberOfEntries = 0 )
   60: {
   61:     var query = string.Empty;
   62:     if( numberOfEntries > 0 ) 
   63:     {
   64:         query = string.Format("SELECT TOP {0} * FROM {1} ORDER BY Created DESC", numberOfEntries.ToString(), GuestbookHelper.TableGuestbook);
   65:     }
   66:     else
   67:     {
   68:         query = string.Format("SELECT * FROM {0} ORDER BY Created DESC", GuestbookHelper.TableGuestbook);
   69:     }
   70:  
   71:     var database = Database.Open(DatabaseName);
   72:     var entries = database.Query(query);
   73:     
   74:     <ul>
   75:         @foreach( var entry in entries)
   76:         {
   77:             <li>
   78:                 <div class="guestbook-entry-from">Von @entry.Name</div>
   79:                 <div class="guestbook-entry-created">eintragen am @entry.Created.ToShortDateString()</div>
   80:                 <div class="guestbook-entry-entry">@entry.Entry</div>
   81:             </li>
   82:         }
   83:     </ul>
   84: }
   85:  
   86: @helper ShowForm()
   87: {
   88:     <form method="post">
   89:         <fieldset>
   90:             <legend>Ins Gästebuch eintragen</legend>
   91:             <div class="guestbook-form-from">            
   92:                 <label for="name">Dein Name:</label>
   93:                 <input id="name" type="text" name="name" size="30"/>
   94:             </div>
   95:             <div class="guestbook-form-entry">
   96:                 <label for="entry">Eintrag:</label>
   97:                 <textarea id="entry" name="entry" cols="50" rows="5"></textarea>
   98:             </div>
   99:             <input type="submit" value="Eintragen"/>
  100:         </fieldset>
  101:     </form>
  102: }