ASP.NET MVC Preview 2 + Membership

Ich hab mich in den letzten 3 Tagen (jeweils vielleicht 1,5 Stunden)  mit dem ASP.NET MVC (Preview 2) beschäftigt.

Wer ASP.NET MVC mit dem Visual Web Developer ausprobieren möchte, der schaut sich am besten diesen Blogpost von mir an.

Wenn man das MVC Modell installiert hat, bekommt man eine neue Projektvorlage:

image

Wenn man dies nun das erste mal startet, erblickt man eine doch schon nett ausschauende Seite:

image

Leider kann man nur zwischen "Home" und "About" hin und her schalten.

Ich will ein einfaches Loginsystem haben

Grob hab ich ähnliche Schritte wie hier gemacht – also ASP.NET DB aufgesetzt, User eingetragen & das Menü erstmal erweitert (und die CSS etwas umgestellt) :

Vorher:

image

Nachher:

image

Der "Login" & "Register" Button verweist auf den LoginController (die genaue Implementation findet ihr im Download) :

image 
(das Attribut wird später erklärt)

Im Login Userinterface sieht das so aus
"Index.aspx"

image 

"PasswordRecovery.aspx"

image 
(nicht wundern: hier gibt man den Nutzernamen ein und das generierte Passwort wird hier wieder ausgegeben – in einer richtigen Applikation würde man dies über eine Email an den jeweiligen schicken)

"Register.aspx"

image

In der Dateistruktur ist es recht übersichtlich:

image

Nach einem erfolgreichen Login

Das Menü wird entsprechend (über das ASP.NET LoginView Control) verändert:

image

Das Profil kann man auf dieser Seite ansehen:

image

… und editieren:

image

In der Dateistruktur:

image

… und der Controller:

image

Rechtesystem mit Rollensystem

Ich habe noch eine Adminrolle hinzugefügt, dieser kann User auf einer Übersichtsseite wieder löschen und hat eine anderes Menü:

image

Die Administrationsseite:

image

Der "Delete" link verweisst auf diese URL:

"/Useradmin/Delete/[USERNAME]"

Der Controller ist auch recht einfach:

image

Mit einem Klick auf den Link wird der Nutzer gelöscht.

Wie sieht das ganze Projekt aus?

image

Das ist das gesamte Projekt – sieht auf dem ersten Blick viel aus, allerdings ist es einfach durch das MVC Paradigma eine solche Trennung zwischen den einzelnen Views. Die Views selbst sind meistens sehr schmal gehalten.

Was machen diese Attribute "RequiresRole" & "RequiresAuthentication"?

In ASP.NET WebForms kann man über die Web.config die Sicherheitsregeln einstellen. Das wird auf die entsprechende URL gemappt – da aber die URL im MVC nur noch wenig mit der richtigen Pfadangabe zutun hat, gibt es da natürlich Probleme.

Abhilfe schaffen diese beiden Attribute, welche überprüfen, ob der Nutzer authentifiziert ist oder ob er in der angegebenen Rolle ist. Der Code dafür stammt von Rob Conerys Blog.

Wie schickt man Daten an den Controller und wieder zurück?

Um mal ein Beispiel zu zeigen, wie einfach die Kommunikation zwischen den Controllern und den Viewpages ist, möchte ich die Register Methode im LoginController erklären:

image

Damit ich die Registrierseite unter der URL "Login/Register" erreichen kann, prüfe ich im ersten Schritt, ob ich bereits irgendwelche Daten in dem Request stehen.

Wenn ja:

Verarbeite die Daten – also befülle das Membership System. Wenns ein Fehler gibt (z.B. der Nutzer existiert bereits), dann merke dir in "ViewData", dass ein Fehler aufgetreten ist und render den View.
Die Membership API ist in diesem Fall unser Model – das wir entsprechend befüllen.

Wenn nein:

Render den View

Im View ist sehr einfaches HTML – keine runat="server" etc.

Hinweis: Scott Guthrie hat dieses Thema bereits vor einige Zeit gut erklärt.

Erweitertes Beispiel ist fertig.

Man kann sich bei der Demoapplikation nun Anmelden, Registrieren, ein neues Passwort generieren lassen wenn es vergessen wurde, seine Hauptdaten ändern und der Admin kann Nutzer löschen – ich denke für einen ersten Wurf ist das eigentlich schon ok :)

Unten findet ihr diese Applikation zum Runterladen und selber ausprobieren. Wichtig ist, dass ihr die ASP.NET MVC Preview 2 installiert habt.

An die Kritiker, die meinen, dass man das mit den eingebauten ASP.NET Controls viel schneller hinbekommt: Das mag erstmal hier vielleicht stimmen – allerdings sind die Controls verdammt umständlich, wenn man die etwas verändern möchte oder ganz einfache Funktionalität einbauen möchte.
Im Zusammenhang mit einer Masterpage (und vielleicht wenn man das Logincontrol noch abändert), funktioniert die "Enter" Taste nicht mehr – das muss man erst recht komplex umstellen. Das ganze ist recht fix implementiert gewesen – die Geschwindigkeit (und die nette Logik) mit der man entwickelt empfinge ich als ex-PHP Entwickler wesentlich logischer, als dieses Postback Modell.

Wer auf pures HTML steht (dazu zähle ich mich) und diese Servercontrols für den "falschen" Weg hält, der sollte sich das Beispiel hier mal anschauen. Ich gebe zu, dass der Inlinecode sicherlich auch noch nicht ganz der Weisheit letzter Schluss ist, allerdings ist eine ViewPage auch nichts anderes als eine Klasse, welche ein Konstruktor hat – wenn man dies alles noch mit kleinen Methoden und/oder UserControls auslagert, ist das MVC Model für viele Fälle sicher auch eine ebenso gute Wahl.

Letzter Hinweis:

Das ist eine Demoapplikation – wer sich näher mit dem MVC Modell beschäftigt, wird bestimmt noch viele weitere coole Features finden.

[ Download Democode ]*

* in der ReadMe.txt stehen die Logindaten für das Beispiel

Empfohlene Links:

Die Videos von Scott Hanselman zu ASP.NET MVC sowie die Northwind Sample App sollte man sich auch anschauen.

Read more

Unterschiede zwischen WPF und Silverlight 2

Ich stecke nicht allzu tief in der WPF oder Silverlight 2 Entwicklung, allerdings fand ich diesen Blogpost von Rob Eisenberg sehr interessant. Wenn man ihm glaubt, sind einige Hauptkonzepte in Silverlight 2 anders gelöst als in WPF: – Databinding – Styles – Trigger – und noch einige kleinere Sachen Das mag auf den ersten Blick […]

Read more

ASP.NET MVC – Source Code & Builds werden auf Codeplex veröffentlicht

Wie ich gerade in Brad Brams (und in Phil Haacks) Blog gelesen habe, wird wohl der komplette Source Code demnächst auf Codeplex zu finden sein. Zwar wird das .NET Framework nach und nach ebenfalls veröffentlicht (dazu zählen alle ASP.NET Teile), allerdings wird es auf Codeplex regelmäßige ASP.NET MVC Builds (d.h. runterladen, VS starten und staunen) […]

Read more

Miniblogging – hu?

Ich als Web 2.0 Mensch habe jetzt ein neues Experiment laufen: Miniblogging mit Twitter. Auf dem Blog ist rechts jetzt mein Twitter Feed eingebunden. Für alle interessierten: Ich habe dieses WordPress Plugin genommen & dazu natürlich noch diese Firefox Extension. Hier ist meine Twitter URL. Schauen wir mal ob das irgendwas bringt – und wenn […]

Read more

Buchempfehlung: Kochbuch für Geeks

Mal eine etwas andere Kost gibt es diesmal als Buchempfehlung. Es hält sich ja hartnäckig das Gerücht, Geeks ( oder Nerds) können nicht kochen. Das mag zum Teil stimmen – bei manchen brennt selbst Wasser an – aber es gibt Abhilfe: Das Kochbuch für Geeks! Von Geeks für Geeks – wer wollte nicht schonmal seine […]

Read more

HowTo: Databinding in WPF (& Silverlight 2) – Einstieg

In diesem HowTo geht es um den Einstieg in das Thema "Databinding" mit der Windows Presentation Foundation (was so eigentlich auch in Silverlight 2 geht). Wer Databinding aus ASP.NET her kennt, wird sich in die WPF Databinding Möglichkeiten sicherlich verlieben. Doch erstmal langsam – was ist eigentlich "Databinding"? Jeder Entwickler kennt es: Im Code häuft […]

Read more

Mix08 – Links zu Silverlight 2, ASP.NET MVC, Expression Blend…

Neben dem IE8 wurden heute folgende weitere Sachen zum Download oder Anschauen freigegeben: ASP.NET MVC ASP.NET MVC Preview Beta 2 – Download @ Microsoft Download Silverlight 2 Microsoft Silverlight Tools Beta 1 for Visual Studio 2008 – Download @ Microsoft Download Microsoft® Silverlightâ„¢ 2 Software Development Kit Beta 1 Documentation – Download @ Microsoft Download […]

Read more

Enttäuschende erste Infos zum IE 8 Beta 1

Winfuture.de hat einen recht großen Artikel rund um den neuen IE8 bereitgestellt, der auf die Neuerungen eingeht. Winfuture ist wie gewohnt sehr Microsoft freundlich. Schauen wir mal: Positives: Sollte endlich nach Standard rendern (schauen wir mal, ob der Fehler im Detail liegt) Webdesigner Werkzeuge – Veränderung der DOM & JS Debugger Sicherheitszeugs – will ich […]

Read more

Unbekannter Brief mit Lochkarte bekommen – Werbung für Visual Studio 2008

Robert hatte vor einiger Zeit eine Lochkarte bekommen. Wie sich herraustellte war das Teil des ARGs The Final Mill und sollte Werbung für das Visual Studio 2008 machen. Mehr Infos unter: http://www.heise.de/tp/r4/artikel/27/27429/1.html http://www.patmo.de/2008/02/28/final_mill.html

Read more

MSDN: Silverlight 2 Beta 1 – Development with the .NET Framework

Heute beginnt die Mix und auf der MSDN gibt es bereits nun eine Dokumentation über das Entwickeln mit Silverlight 2 (Beta 1).

Read more

Letzte Posts

  • image.png
    Source Code veröffentlichen – aber bitte mit Lizenz

    Seit es den Blog gibt wird auch meist der gesamte Demo Source Code mit veröffentlicht. Das Ganze hatte ich am Anfang noch als .zip verteilt, später lag es mal auf Google Code und nun liegen alle Samples und sonstige Sachen auf GitHub. Beim letzten User Group Treffen in Zürich mit dem Titel “Open Source: Get […]

  • Fix: Cannot convert from ‘CConnectProxy::_ComMapClass *’ to ‘AddInDesignerObjects::IDTExtensibility2 *’

    Mal einen etwas esoterischer Blogpost, welcher auftaucht wenn man zu viel mit Office Addins rumspielt. Der Fehler passiert beim Bauen von C++ Projekten, welchen diesen Typ benötigen. Lösung (auf 64bit Systemen): C:\Program Files (x86)\Common Files\DESIGNER>regsvr32 MSADDNDR.DLL And Rebuild. Meine lieben Kollegen hatte mir dies schon mehrfach gesagt, allerdings hatte ich es immer wieder vergessen Das […]

  • Gegen das Gesetz verstoßen: X Jahre Haft. Gegen die Terms of Use verstoßen: Bann auf Lebenszeit. Danke Google & co.

    Bei fast allen Diensten die man im Internet nutzen kann muss man den “Terms of use” zustimmen. Völlig logisch dass da natürlich drin steht was erlaubt und was nicht. Wenn man gegen diese Regelungen verstößt hat das Unternehmen natürlich das Recht etwas dagegen zu unternehmen. In der heutigen Welt beherrschen einige wenige Unternehmen die digitale […]

  • image.png
    RSS Feed samt Kommentaranzahl und andere nicht Standard Elemente mit dem SyndicationFeed auslesen

    Jetzt mal ein Blogpost ohne ein fancy NuGet Package: Seit .NET 3.5 gibt es die SyndicationFeed Klasse. Eine schon etwas ältere API, reicht aber aus um Atom bzw. RSS Feeds zu lesen. In diversen RSS Feeds gibt es aber Erweiterungen, welche man natürlich auch auslesen möchte. So gibt WordPress z.B. auch die Anzahl der geposteten […]

  • image.png
    ASP.NET Bundling & Fontawesome

    Vor einer halben Ewigkeit hatte ich mal geschrieben wie man Fontawesome in ASP.NET nutzen kann. Aufgrund des Alters des Post und einem Kommentar ob man denn Fontawesome auch in das ASP.NET Bundling Framework integrieren kann möchte ich nur ein kurzes Update schreiben. TL;DR: NuGet Package “Fontawesome” runterladen und Pfad in der Bundleconfig angeben. Kurze Schritte […]

Amazon Shop

Facebook