2012-10-09 27 views
5

Gần đây tôi đã tham gia một nhóm quản lý ứng dụng web ASP cổ điển. Nó đã được làm việc tốt cho nhu cầu của nhóm chúng tôi. Tuy nhiên, một quyết định đã được đưa ra, trước khi tôi tham gia, để chuyển sang ASP .Net. Vì chúng tôi chủ yếu là các nhà phát triển ASP, chúng tôi viết mã trong ASP. Net như chúng tôi sẽ trong ASP cổ điển (đối với hầu hết các phần). Có thể giới thiệu MVC cho ứng dụng/dự án này không?Khuôn khổ MVC có thể được sử dụng trong một ứng dụng web hiện đang sử dụng ASP .NET không?

Cảm ơn!

Trả lời

2

Có, có thể sử dụng MVC trong dự án WebForms truyền thống. Tôi đã di chuyển một dự án WebForms lớn sang MVC 2 một vài năm trước đây, và đây là những phát hiện của tôi (tôi đã cập nhật chúng để phản ánh MVC 3)

  1. Đảm bảo bạn đã cài đặt .NET 4.0, cũng như MVC 3 khuôn khổ và phần mở rộng VS.
  2. Tạo dự án MVC trống mới để sử dụng làm tham chiếu.
  3. Xem web.config mặc định cho dự án tham chiếu. Về cơ bản, bạn muốn sử dụng web.config tham chiếu và hợp nhất những thứ bạn cần từ dự án hiện tại của mình.
  4. Xem tham chiếu global.asax.cs. Tương tự như trên, bạn muốn hợp nhất các thay đổi trong tham chiếu .cs vào tệp global.asax.cs của ứng dụng hiện tại của bạn.
  5. Bạn sẽ cần phải thêm các tài liệu tham khảo sau đây để dự án web của bạn:

    System.Web.Abstractions, System.Web.Extensions, System.Web.Helpers, System.Web.Mvc, Hệ thống .Web.Định tuyến

  6. Bạn có thể bật các phần mở rộng VS bằng cách thay đổi ProjectTypeGuids:

    • Trong giải pháp Explorer, bấm chuột phải vào tên dự án và chọn Project Unload. Sau đó kích chuột phải vào tên dự án một lần nữa và chọn Edit ProjectName.csproj.
    • Tìm phần tử ProjectTypeGuids và thêm {E53F8FEA-EAE0-44A6-8774-FFD645390401}.
    • Lưu thay đổi, bấm chuột phải vào dự án, sau đó chọn Tải lại dự án.
  7. Thêm các thư mục tiêu chuẩn sau đây để biết nội dung MVC:

    • ~/Lần đọc
    • ~/Views/Shared
    • ~/Bộ xử lý
    • ~/Models (cho các mô hình điểm của bạn , tùy chọn)
    • ~/Nội dung (cho CSS và hình ảnh, tùy chọn)
    • ~/Script (cho JS, tùy chọn)

Ghi chú thêm:

  1. Nếu WebForms hiện tại của bạn dựa trên các thiết lập web.config cho phép (chẳng hạn như ngăn chặn người sử dụng trái phép), điều này sẽ không được công nhận bởi những hành động MVC, vì định tuyến hoạt động hoàn toàn riêng biệt với ủy quyền WebForms. Sử dụng AuthorizeAttribute để yêu cầu ủy quyền hoặc hạn chế hành động đối với một số vai trò hoặc người dùng nhất định. Bạn thậm chí có thể specify global filters để bạn không phải áp dụng thuộc tính này trên mọi bộ điều khiển hoặc hành động đơn lẻ.
  2. Có thể có các cân nhắc bổ sung để tạo MVC hoạt động với các phiên bản IIS trước 7 hoặc với các nhóm ứng dụng sử dụng đường dẫn Cổ điển. Xem xét sử dụng IIS 7+ với đường ống Tích hợp.
  3. Ghi chú của tôi ở trên chủ yếu liên quan đến việc nhận được đường cơ sở của MVC hoạt động, sử dụng chế độ xem ASPX. Chế độ xem ASPX sử dụng cùng một đánh dấu như các tệp ASPX mà bạn đã sử dụng trong WebForms. Bạn cũng có thể sử dụng cú pháp Razor mới (primer), mà tôi khuyên bạn nên sử dụng. Bạn có thể sử dụng cả hai trang xem ASPX và Razor cùng một lúc. Tuy nhiên, bạn không thể sử dụng trang cái ASPX trên màn hình Dao cạo (hoặc ngược lại). Ngoài ra, MVC sẽ tìm và sử dụng chế độ xem ASPX trước chế độ xem Dao cạo, vì vậy nếu bạn nâng cấp chế độ xem lên Dao cạo, hãy xóa ASPX gốc. Bạn sẽ cần phải thực hiện thêm một chút công việc để kích hoạt chế độ xem Dao cạo. Tôi đang cố gắng để tìm ghi chú của tôi cho phép Razor. Tôi sẽ cập nhật khi tôi tìm thấy chúng. Một khi bạn đã cài đặt và làm việc Razor, bạn có thể sử dụng this tool by Telerik để chuyển đổi ASPX thành Razor.
  4. Here is a question trên SO về sự cố tôi đã có khi nâng cấp. Tôi chỉ cung cấp nó bởi vì nó bao gồm một số điểm tôi đã đề cập ở trên chi tiết hơn. Tuy nhiên, tôi đã nâng cấp lên MVC 2 vào thời điểm đó, vì vậy một số công cụ này đã lỗi thời.
+0

Câu trả lời này không đề cập đến Định tuyến; Tôi nghi ngờ các tuyến đường MVC mặc định sẽ can thiệp vào sự sẵn có của hầu hết các trang ASP.Net bình thường. –

+0

@ChrisMoschini MVC sẽ xem xét xem tài nguyên được yêu cầu có khớp với tệp vật lý hay không và nếu có, tệp đó sẽ được xử lý theo trình xử lý của nó. Vì vậy, trong điều khoản của các trang .ASPX, nó không phải là một vấn đề. Tuy nhiên, bạn sẽ cần phải giải quyết bất kỳ vấn đề nào mà bạn có một URL có thể định tuyến tới MVC và cũng có thể một hoặc nhiều trình xử lý khác.Đối với dự án WebForms trung bình của bạn, điều đó không phải là rất phổ biến, nhưng có thể. Ví dụ: giả sử bạn có một tài liệu mặc định .ASPX nhưng muốn MVC tiếp quản. Bạn sẽ cần phải A) Thay đổi tài liệu mặc định để .ASPX không còn được xem xét hoặc B) xóa ASPX nữa – HackedByChinese

2

Câu trả lời ngắn gọn là có, điều đó là có thể.

Scott Hanselman đã viết khoảng this topic trước đây.

Tùy thuộc vào các kỹ năng trong nhóm của bạn, bạn có thể thấy khó khăn để tăng tốc - có thể viết mã kiểu MVC sạch trong ASP cổ điển nhưng hầu hết mọi người không.

1

Đó là tất nhiên về mặt kỹ thuật có thể. Tuy nhiên, nó có vẻ như nó sẽ là một cú sốc văn hóa, như MVC hoạt động khá khác một chút so với Classic ASP hoặc ASP.NET WebForms. Tôi nghĩ rằng nó sẽ là đáng giá để làm - hoặc chỉ cần gắn bó với ASP.NET WebForms nếu điều đó có vẻ tự nhiên hơn. Nhưng nếu bạn chưa hoàn toàn cam kết với WebForms, MVC có vẻ dễ dàng chuyển sang, IMO.

1

Có. Tôi đã làm việc trên một dự án bắt đầu như là đồng bằng ASP.NET và sau đó thêm một số trang ASP.NET MVC. Cuối cùng, chúng tôi đã thích MVC nhiều hơn nữa và cuối cùng chúng tôi đã di chuyển tất cả các trang WebForms của chúng tôi để sử dụng MVC. Nhưng toàn bộ thời gian, hai hệ thống đã làm việc rất tốt với nhau.

Đây là duy nhất mà bạn có thể nhớ rằng tôi có thể chạy vào: WebForms hoạt động bằng cách có toàn bộ trang được bọc trong một thẻ lớn <form>. Vì HTML không cho phép bạn có các thẻ <form> lồng nhau, bạn thường không thể sử dụng biểu mẫu MVC bên trong trang WebForms. Hãy giữ các trang WebForms riêng biệt với nội dung MVC của bạn, tránh sử dụng biểu mẫu HTML trong nội dung MVC có thể xuất hiện trên trang WebForms hoặc sử dụng hộp thoại bật lên cho biểu mẫu của bạn được tạo bên ngoài vùng WebForms DOM.

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