2010-05-02 36 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进行数据访问(包括一些整洁的技巧,例如引用的组合)。

相关问题