2010-05-02 40 views
7

我正在尋找使用F#將一些HTML輸出到網頁。有任何想法嗎?使用F#進行簡單的.NET Web開發#

+0

看一看這個問題:HTTP://計算器。com/questions/1135959/f-and-asp-net – 2010-05-02 20:01:31

+1

如果你問的是關於ASP.NET(我認爲是這樣,基於標籤),那麼它可能是重複的。但是,還有其他方法可以從F#生成HTML(例如,直接進行,但這可能不是您要做的)。 – 2010-05-02 20:13:48

+1

我所看到的所有相關問題都表明這是可能的,但在解釋實際操作中缺乏細節。 – 2010-05-02 20:27:12

回答

10

爲了給出一些具體的「HOWTO」,我嘗試創建一個簡單的ASP.NET MVC應用程序,它在F#中實現了關鍵部分。正如在引用的答案中指出的那樣,使用F#進行Web開發的最佳方式是創建一個C#Web應用程序,並將實現實際行爲的所有類型移至F#庫。儘管有可能直接創建F#web項目,但有很多限制(例如,不完美的智能感知和其他可能的問題),所以在C#中管理aspx文件可能是一個更好的主意。

這裏是我做的(使用Visual Studio 2010):

  • 創建一個新的C#項目 「ASP.NET MVC 2 Web應用程序」。這將創建一個帶有一些初始模板和幾頁的新C#項目。我會忽略處理帳戶的頁面(您可以刪除它)。
  • Controllers中有HomeController.cs文件,其中包含主頁的功能(加載數據等)。您可以刪除文件 - 我們將在F#中重新實現它。
  • 添加新的「F#庫」項目並添加對ASP.NET MVC程序集的引用。其中有很多(參見C#項目),但最重要的是,您需要System.Web.Mvc.dll和其他引用此引用的其他引用(F#編譯器會告訴您需要哪些引用)。
  • 現在,將下面的代碼添加到Module1.fs - 這實現原來的HomeController,它曾經是用C#編寫的。

的源代碼看起來是這樣的:

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 

這是一個簡單的重新實現原來的C#代碼(創建一個單獨的類)的。我使用了原來的C#命名空間,以便MVC框架可以輕鬆找到它。

來自C#項目的文件Views\Home\Index.aspx定義了用戶界面,並使用您設置爲來自F#項目的ViewData字典的數據。

這個「HOWTO」顯示瞭如何使用F#編寫ASP.NET MVC應用程序,但創建普通WebForms應用程序的步驟本質上是相同的 - 創建一個C#Web應用程序並將實現類移動到F#庫,它將從C#Web應用程序中引用(它實際上不包含太多的C#代碼)。

+0

謝謝!這正是我之後的事情! = d 一件事:我注意到,這個工程: 「成員x.Index()= x.View()」 注缺乏類型註釋和鑄造的。這個可以嗎?它工作正常,但我很好奇,爲什麼你做了不同的事情。 – 2010-05-02 21:59:42

+0

@Matt:如果它有效,那麼我認爲它是正確的:-)。我認爲MVC在內部使用Reflection,所以它可能有點靈活。我以不同的方式做了我的版本,因爲我只是翻譯了C#版本(就像它一樣,以避免可能出現的各種細節問題)。 – 2010-05-02 22:17:22

9

如果有人有興趣在一個更詳細的討論,我寫了一篇關於這個主題的文章:

文章顯示了F#創建了一個相對簡單的MVC Web應用程序。控制器和模型在單獨的F#庫中實現(與路由映射一起)。該示例還演示瞭如何使用F#中的LINQ進行數據訪問(包括一些整潔的技巧,例如引用的組合)。

相關問題