2010-05-02 31 views
7

Tôi đang tìm cách xuất một số HTML sang trang web bằng F #. Bất kỳ ý tưởng?Phát triển web .NET đơn giản với F #

+0

Có xem xét câu hỏi này: http: // stackoverflow.com/questions/1135959/f-and-asp-net –

+1

Nếu bạn đang hỏi về ASP.NET (tôi nghĩ vậy, dựa trên các thẻ) thì có lẽ nó là một bản sao. Tuy nhiên, có nhiều cách khác để tạo HTML từ F # (ví dụ: trực tiếp, nhưng đó có thể không phải là những gì bạn đang theo dõi). –

+1

Tất cả các câu hỏi liên quan mà tôi đã xem xét nói rằng có thể nhưng thiếu bất kỳ chi tiết nào trong việc giải thích cách bạn thực sự làm điều đó. –

Trả lời

10

Để cung cấp cho một số "HOWTO" cụ thể, tôi đã thử tạo một ứng dụng ASP.NET MVC đơn giản thực hiện các phần chính trong F #. Như đã lưu ý trong câu trả lời được tham chiếu, cách tốt nhất để sử dụng F # để phát triển web là tạo một ứng dụng web C# và di chuyển tất cả các kiểu thực hiện hành vi thực tế đến thư viện F #.

Mặc dù có thể tạo trực tiếp dự án F # web, nhưng có rất nhiều hạn chế (ví dụ: không hoàn toàn intellisense và các vấn đề khác), vì vậy việc quản lý các tệp aspx trong C# có lẽ là một ý tưởng tốt hơn.

Đây là những gì tôi đã làm (sử dụng Visual Studio 2010):

  • Tạo một C# dự án mới "ASP.NET MVC Application 2 Web". Điều này tạo ra một dự án C# mới với một số mẫu ban đầu và một vài trang. Tôi sẽ bỏ qua trang xử lý các tài khoản (bạn có thể xóa nó).
  • HomeController.cs tệp trong Controllers, chứa chức năng cho trang chủ (tải dữ liệu, v.v.) Bạn có thể xóa tệp - chúng tôi sẽ triển khai lại nó trong F #.
  • Thêm dự án "F # Library" mới và thêm tham chiếu đến các hội đồng ASP.NET MVC. Có rất nhiều người trong số họ (xem dự án C#), nhưng quan trọng nhất, bạn sẽ cần System.Web.Mvc.dll và những người khác được tham chiếu bởi cái này (trình biên dịch F # sẽ cho bạn biết cái nào bạn cần).
  • Bây giờ, hãy thêm mã bên dưới vào Module1.fs - công cụ này thực hiện HomeController gốc được sử dụng để viết bằng C#.
  • đang

Nguồn trông như thế này:

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 

này chỉ đơn giản là một tái thực hiện các mã C# ban đầu (tạo một lớp duy nhất). Tôi đã sử dụng không gian tên C# ban đầu, để khung MVC có thể dễ dàng tìm thấy nó.

Tệp Views\Home\Index.aspx từ dự án C# xác định giao diện người dùng và sử dụng dữ liệu mà bạn đặt thành từ điển ViewData từ dự án F # của bạn.

"HOWTO" này cho thấy cách sử dụng F # để viết ứng dụng ASP.NET MVC, nhưng các bước để tạo một ứng dụng WebForms bình thường về cơ bản sẽ giống nhau - tạo ứng dụng web C# và di chuyển các lớp thực hiện sang thư viện F #, sẽ được tham chiếu từ ứng dụng web C# (mà thực sự sẽ không chứa nhiều mã C#).

+0

Cảm ơn bạn! Đây chỉ là những gì tôi đã được sau khi! = D Một điều: Tôi nhận thấy rằng thao tác này: "thành viên x.Index() = x.Xem()" Lưu ý việc thiếu chú thích và truyền kiểu. Được không? Nó hoạt động tốt, nhưng tôi tò mò là tại sao bạn đã làm bạn khác nhau. –

+0

@Matt: Nếu nó hoạt động, thì tôi cho rằng đó là Ok :-). Tôi nghĩ rằng MVC sử dụng Reflection trong nội bộ, vì vậy nó có thể là một chút linh hoạt. Tôi đã làm phiên bản của tôi khác nhau, bởi vì tôi chỉ đơn giản là phiên dịch C# (chính xác như nó đã được, để tránh các vấn đề có thể với các chi tiết khác nhau). –

9

Trong trường hợp ai đó quan tâm đến một cuộc thảo luận chi tiết hơn, tôi đã viết một bài báo về chủ đề này:

bài viết cho thấy một ứng dụng web MVC tương đối đơn giản được tạo ra trong F #. Các bộ điều khiển và mô hình được thực hiện trong một thư viện F # riêng biệt (cùng với ánh xạ tuyến đường). Mẫu cũng trình bày cách sử dụng LINQ từ F # để truy cập dữ liệu (bao gồm một số mẹo nhỏ gọn như thành phần trích dẫn).

Các vấn đề liên quan