2011-08-25 68 views
11

Tôi muốn thêm hỗ trợ MVC vào một dự án Trang web hiện tại (không phải dự án ứng dụng web) và có một vài câu hỏi.Thêm MVC vào Trang web ASP.NET

  1. Để có được tính ưu việt MVC của Visual Studio, có vẻ như tôi cần cập nhật nút <ProjectTypeGuids> của tệp là . Không có tệp csproj trong dự án trang web.
  2. Có vẻ như tôi cần tạo thư mục ModelsControllers trong App_Code. Điều này có đúng không? Tôi thích có các thư mục này dưới gốc.
  3. Đối với Views tôi có nên tạo các tệp aspxaspx.cs không? Có phải cshtml các tệp dao cạo được hỗ trợ trong loại thiết lập này không?

Bất kỳ phản hồi nào khác đều được đánh giá cao. Cảm ơn

+5

Bạn cần chuyển sang ứng dụng web, AFAIK. – SLaks

+0

@SLaks - Sự hiểu biết của tôi là việc chuyển sang ứng dụng web là một cách rõ ràng hơn nhưng không bắt buộc. – Nick

Trả lời

8

Tôi đã thêm thành công một ASP.NET MVC 3 cho dự án Webforms và đây là một số gợi ý:

  • Thêm Controllers như một dự án thư viện lớp học riêng biệt và thêm một tham chiếu đến dự án này từ Web tạo web dự án
  • Tôi đã cố gắng để có được hỗ trợ VS MVC (như bộ điều khiển goto vv), nhưng thêm GUID {E53F8FEA-EAE0-44A6-8774-FFD645390401} vào tệp .csproj không giúp được gì.
  • Có, bạn có thể thêm tham chiếu để nhận Phiên từ thư viện lớp học của mình. Bạn luôn có thể giả lập nó nếu bạn muốn viết các bài kiểm tra đơn vị.
  • Thêm Views thư mục vào thư mục gốc
  • Thêm Models trong App_Code
  • Nếu bạn đang sử dụng Razor, sau đó bạn cần phải thêm System.Web.RazorSystem.Web.WebPages tài liệu tham khảo
  • Nếu bạn đang sử dụng Razor, cập nhật Web.config mỗi post này
  • Xin lưu ý, bạn có thể thêm điều khiển máy chủ vào chế độ xem của mình miễn là chúng không sử dụng postback (tôi có rất nhiều điều khiển máy chủ từ dự án webforms mà tôi đã sử dụng)
+0

Lookout với việc sử dụng các đường dẫn vitual. Trên trang web của tôi khi tôi cố gắng thêm mvc vào nó đã không làm việc sau khi bước này chỉ vì tôi đã sử dụng '.' trên đường dẫn ảo (Ví dụ: "project.web"). –

0

ASP.NET MVC không hỗ trợ mẫu trang web, nó chỉ có thể là Ứng dụng web. Vì vậy, bạn không thể thêm chức năng MVC vào dự án biểu mẫu web.

+3

Điều đó không đúng. Bạn có thể thêm MVC vào dự án biểu mẫu web. Công cụ VS có thể không hoạt động tốt, nhưng MVC sẽ hoạt động tốt nếu bạn làm theo các bước nhỏ nhặt được vạch ra bởi @chris –

0

Tôi đã thấy tác phẩm này trong quá khứ nếu bạn đặt tệp Global.asax trong thư mục gốc của trang web của bạn. Bạn sẽ cần một cách để dự án của bạn để nhận biết và phân biệt các yêu cầu MVC từ yêu cầu của tiêu chuẩn, như thế này:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute("Default", 
     "{controller}.mvc/{action}/{id}", 
     new { controller = "Home", action = "Index", id = "" } 
    ); 
} 

Vì vậy, một url MVC trong ứng dụng của bạn có thể trông giống như: http://www.mywebsite.com/mycontroller.mvc/View/5

+0

Có, điều đó là có thể. Tuy nhiên, tôi tò mò muốn biết nếu tôi có thể nhận được sự hài lòng của VS MVC trong một dự án trang web (và các câu hỏi khác được nêu trước đó) – Nick

+0

Bạn không phải phân biệt giữa yêu cầu mvc và biểu mẫu web. Việc định tuyến sẽ tự động tìm ra cái nào sẽ hiển thị. Nếu xung đột url, thì bạn có thể cần thay đổi mọi thứ để hoạt động. –

0

Tôi tin rằng nếu bạn thiết lập dự án MVC mới và sao chép biểu mẫu web của bạn qua dự án mới, chúng sẽ hiển thị như mong đợi.

Tôi chưa thử nghiệm điều này quá nhiều nhưng tôi đã thử trong quá khứ vì tò mò và các biểu mẫu web vẫn hiển thị OK. Tôi đoán nó phụ thuộc vào sự phức tạp của dự án của bạn là liệu phương pháp này có hiệu quả hay không.

Điều này sẽ liên quan đến việc thay đổi loại dự án của bạn.

+0

Dự án hiện tại thực sự rất phức tạp. Tôi ổn với việc thêm dự án MVC vào nó, nhưng sẽ tránh xa việc tạo ra một dự án MVC mới và sao chép dự án webforms vào nó trừ khi tôi thực sự thực sự cần. Bạn có một nguồn tài nguyên có thể giúp đỡ nếu tôi đi theo hướng đó? – Nick

9

Với MVC2 asp.net và ở trên, nhóm nghiên cứu MVC tách các chức năng cốt lõi vào ba hội khác nhau, mỗi trong số đó kéo dài từ lắp ráp System.Web chung:

  • System.Web.Routing
  • System.Web.Abstractions
  • System.Web.Mvc

với tách này, họ đã đi trước và làm cho các hội đồng để "làm việc trong máy chủ trung tín nhiệm en viroments và có thể triển khai bin ".

Một trong những điều tốt đẹp về tính năng này là, bạn không cần phải có một loại dự án cụ thể để chạy MVC. Bạn chỉ cần hội đồng, một số thư mục và một web.config tinh chỉnh.

Để thực hiện việc này, bạn chỉ cần đặt các hội đồng trong thư mục bin cục bộ của dự án của bạn và thực hiện các tham chiếu cần thiết cho các hội đồng đó. Một khi điều này được thực hiện, bạn có quyền truy cập vào asp.net MVC.

Dưới đây là một số hướng dẫn chi tiết từ cuốn sách Wrox Professional ASP.NET MVC 1.0 mà sẽ giúp bạn bắt đầu:

Bao gồm MVC trong Web Forms đang tồn tại ứng dụng

Thêm chức năng ASP.NET MVC để một Web hiện tại Đơn đăng ký biểu mẫu bao gồm ba số các bước khác nhau:

1. Thêm một tham chiếu đến ba thư viện cốt lõi mà ASP.NET MVC cần: System.Web.Mvc, System.Web.Routing và System.Web.Abstractions.

2. Thêm hai thư mục vào ứng dụng của bạn: Bộ điều khiển và Chế độ xem.

3. Cập nhật Web.config để tải ba cụm vào lúc chạy cũng như đăng ký UrlRoutingModule HttpModule.

Để tham khảo, dưới đây là một vài blog/trang web mà có một số kịch bản chi tiết hơn mà có thể giúp bạn ra ngoài:

Running ASP.NET Webforms and ASP.NET MVC side by side

Mixing ASP.NET Webforms and ASP.NET MVC

ASP.NET WebForms and ASP.NET MVC in Harmony

Chúc may mắn, và hy vọng điều này sẽ giúp bạn một số.

+0

Tôi có thêm MVC vào dự án mà không gặp bất kỳ vấn đề gì. Tuy nhiên, câu hỏi của tôi là liên quan đến việc hỗ trợ Visual studio cho dự án lai này. Có vẻ như điều này có thể được thực hiện trong dự án ứng dụng web bằng cách sửa đổi tệp 'csproj' nhưng tôi chưa tìm ra cách làm cho nó hoạt động với một dự án trang web. Tôi cũng có những câu hỏi khác đã được vạch ra trước đó. – Nick

+0

Dao cạo sẽ hoạt động tốt, nhưng chỉ để giữ mọi thứ trông giống nhau vì bạn đã làm việc với các tệp .aspx, tôi sẽ tiếp tục và giữ nguyên chế độ xem MVC bằng công cụ xem biểu mẫu web. Đây có lẽ là một cuộc gọi của bạn. Để sử dụng thư mục App_Code, nếu bạn đang sử dụng một trang web thẳng lên, bạn có thể phải sử dụng nó cho các mô hình và bộ điều khiển. Nếu bạn đã đi trước và thay đổi thành một ứng dụng web, mọi thứ sẽ được tuân theo một DLL duy nhất, vì vậy nó thực sự không quan trọng nơi các thư mục đó đi. – Chris

+0

Vì thư mục bộ điều khiển cần nằm trong 'App_Code', có cách thêm thư viện lớp và tham chiếu đến dự án trang web không? Tôi muốn tránh xa việc thêm bất kỳ thứ gì trong thư mục 'App_Code' nếu có thể. Ngoài ra, bất kỳ ý tưởng làm thế nào tôi sẽ tích hợp việc sử dụng 'khu vực'? – Nick

0

Tôi đã được giao nhiệm vụ cập nhật (nhưng tiếc là không viết lại) di sản .Net 3.5, VB.NET (ughh) webforms, dự án trang web và tôi đã nâng cấp thành công lên 4.0 và thêm hỗ trợ MVC3 (với thư mục mã hóa riêng biệt để hỗ trợ C#, yah!), và nó hoạt động tốt.

Các hướng dẫn @DotnetDude làm việc, nhưng hãy cẩn thận của một vài điều ...

(1) Khi thêm hỗ trợ Razor, điều này được thực hiện trong Views/file Web.config không web.config tệp trong thư mục gốc của dự án của bạn.

(2) Nếu bạn xảy ra để thêm một tập tin Razor (.chtml hoặc .vbhtml) NGOÀI của thư mục Views, vs.net sẽ cập nhật web.config gốc của bạn với giá trị sau

<appSettings> 
    <add key="webpages:Enabled" value="true" /> 
</appSettings> 

Không tốt. Cài đặt này cho phép duyệt trực tiếp các trang dao cạo và khi được đặt thành TRUE trong trường hợp của tôi, khiến mọi thứ bị hỏng. Tuy nhiên, điều tôi thấy là làm cho các cuộc gọi AJAX từ các trang .aspx của tôi đến một bộ điều khiển được định nghĩa trong thư mục App_Code cho phép tôi hiện đại hóa một ứng dụng chủ yếu là tất cả các postback, và C# để truy cập lớp dữ liệu được viết bằng VB.NET.

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