2010-05-02 10 views
7

Ich bin auf der Suche nach einigen HTML zu einer Webseite mit F #. Irgendwelche Ideen?Einfache .NET Web-Entwicklung mit F #

+0

Haben Sie einen Blick auf diese Frage: http: // Stackoverflow.com/questions/1135959/f-und-asp-net –

+1

Wenn Sie nach ASP.NET fragen (ich denke schon, basierend auf den Tags), dann ist es wahrscheinlich ein Duplikat. Es gibt jedoch andere Möglichkeiten zum Generieren von HTML aus F # (z. B. direkt, aber das ist wahrscheinlich nicht das, wonach Sie suchen). –

+1

Alle verwandten Fragen, die ich angeschaut habe, sagen, dass es möglich ist, aber es fehlt jedes Detail, um zu erklären, wie du es tust. –

Antwort

10

Um ein bestimmtes "HOWTO" zu geben, habe ich versucht, eine einfache ASP.NET MVC-Anwendung zu erstellen, die die wichtigsten Teile in F # implementiert. Wie in der referenzierten Antwort erwähnt, besteht die beste Methode zur Verwendung von F # für die Webentwicklung darin, eine C# -Webanwendung zu erstellen und alle Typen, die das tatsächliche Verhalten implementieren, in eine F # -Bibliothek zu verschieben.

Obwohl es möglich ist, direkt F # Web-Projekt zu erstellen, gibt es viele Einschränkungen (z. B. nicht perfekt Intellisense und möglicherweise andere Probleme), so die aspx Dateien in C# ist wahrscheinlich eine bessere Idee.

Hier ist, was ich getan habe (Visual Studio 2010):

  • Erstellen Sie ein neues C# -Projekt "ASP.NET MVC 2 Web Application". Dies erstellt ein neues C# -Projekt mit einer anfänglichen Vorlage und einigen Seiten. Ich ignoriere die Seite, die Konten behandelt (Sie können es löschen).
  • Es gibt HomeController.cs Datei in Controllers, die Funktionalität für die Homepage enthält (Laden von Daten usw.) Sie können die Datei löschen - wir werden es in F # neu implementieren.
  • Fügen Sie neues "F # Library" -Projekt hinzu und fügen Sie Verweise auf ASP.NET MVC-Assemblys hinzu. Es gibt eine Menge von ihnen (siehe das C# -Projekt), aber am wichtigsten ist, dass Sie System.Web.Mvc.dll und andere benötigen, auf die von diesem verwiesen wird (der F # -Compiler wird Ihnen sagen, welche Sie benötigen).
  • Fügen Sie nun den folgenden Code zu Module1.fs - das implementiert die ursprüngliche HomeController, die in C# geschrieben wurde.

Der Quellcode sieht wie folgt aus:

namespace MvcApplication1.Controllers 

open System 
open System.Web.Mvc 

[<HandleError>] 
type HomeController() = 
    inherit Controller() 

    member x.Index() = 
    x.ViewData.["Message"] <- "Welcome from F#" 
    x.View() :> ActionResult 

    member x.About() : ActionResult = 
    x.View() :> ActionResult 

Das ist einfach eine Re-Implementierung des ursprünglichen C# -Code (eine einzige Klasse erstellen). Ich habe den ursprünglichen C# -Namespace verwendet, damit das MVC-Framework ihn leicht finden kann.

Die Datei Views\Home\Index.aspx aus dem C# -Projekt definiert die Benutzerschnittstelle und verwendet die Daten, die Sie für das ViewData-Wörterbuch aus Ihrem F # -Projekt festgelegt haben. Dieses HOWTO zeigt, wie Sie mit F # eine ASP.NET MVC-Anwendung schreiben, aber die Schritte zum Erstellen einer normalen WebForms-Anwendung sind im Wesentlichen die gleichen - erstellen Sie eine C# -Webanwendung und verschieben Sie die implementierenden Klassen in die F # -Bibliothek. Dies wird von der C# -Webanwendung referenziert (die nicht wirklich viel C# -Code enthält).

+0

Danke! Das ist genau das, wonach ich gesucht habe! = D Eine Sache: Ich habe bemerkt, dass dies funktioniert: "Mitglied x.Index() = x.View()" Hinweis der Mangel an Typenannotationen und Gießen. Ist das ok? Es funktioniert gut, aber ich bin neugierig, warum du deine anders gemacht hast. –

+0

@Matt: Wenn es funktioniert, dann nehme ich an, es ist Ok :-). Ich denke, MVC verwendet Reflection intern, daher ist es wahrscheinlich etwas flexibel. Ich habe meine Version anders gemacht, weil ich einfach die C# -Version übersetzt habe (genau so wie sie war, um mögliche Probleme mit verschiedenen Details zu vermeiden). –

9

Falls jemand in einer ausführlicheren Diskussion interessiert ist, schrieb ich einen Artikel zu diesem Thema:

Der Artikel zeigt eine relativ einfache Web-Anwendung MVC in F # erstellt. Controller und Modell sind in einer separaten F # -Bibliothek implementiert (zusammen mit dem Routen-Mapping). Das Beispiel zeigt auch, wie Sie LINQ from F # für den Datenzugriff verwenden (einschließlich einiger ordentlicher Tricks wie der Zusammensetzung von Zitaten).

Verwandte Themen