2015-10-23 22 views
16

Tôi có một vài trang web tôi đang xây dựng hiển thị cùng một dữ liệu hoặc tương tự trong các trang. Để giảm trùng lặp mã, những gì tôi đã tạo đã tạo một dự án/trang web thứ 3 và tôi đã sử dụng nó làm vị trí cho HTML được chia sẻ, java-script, CSS, hình ảnh, v.v.Cách chia sẻ HTML giữa các dự án ASP.NET MVC4

Tôi có thể bao gồm JavaScript, CSS và hình ảnh tốt từ dự án được chia sẻ sử dụng đường dẫn tương đối. tuy nhiên tôi không thể hiển thị một phần trang HTML. khi cố gắng truy cập vào hai trang web đang cố gắng để tải trang một phần sử dụng mã như thế này:

@RenderPage("/SharedArtifacts/Views/MySharedViewscshtml") 

tôi nhận được câu trả lời sau đây:

The virtual path '/SharedArtifacts/Views/MySharedViewscshtml' maps to another application, which is not allowed. 

Bây giờ tôi đã googled và cố gắng sử dụng ~ tiền tố để chỉ định gốc của đường dẫn để giải quyết vấn đề, nhưng không có kết quả ... vẫn là lỗi tương tự.

Bất kỳ suy nghĩ nào về cách giải quyết vấn đề này?

+4

[Biên soạn asp.net MVC quan điểm của bạn Razor vào một dll riêng biệt] (http://www.chrisvandesteeg.nl/2010/11/22/embedding-pre-compiled-razor-views-in -your-dll /) –

+2

Tôi sẽ xem xét việc tạo các gói NuGet và Feed của riêng bạn và chia sẻ các khung nhìn trong các dự án của bạn theo cách đó. Nguồn cấp dữ liệu có thể đơn giản như vị trí Thư mục trên Hệ thống tệp của bạn. – SimonGates

+0

hmm. một chút bối rối này không được hỗ trợ. tôi sẽ suy nghĩ chia sẻ html phổ biến trong số các dự án khác nhau/trang web là một điều phổ biến – mike01010

Trả lời

5

Chúng tôi làm việc này mọi lúc. Cách đơn giản (không lập trình) là tạo các thư mục ảo trong IIS để ánh xạ tới một thư mục dùng chung cho tất cả các trang đồng hành. Chúng tôi thường làm điều này cho các trang kết quả lỗi và nội dung chung khác.

/Views/SharedVirtual/somefile.ascx

Đường dẫn /Views/SharedVirtual được ánh xạ qua các thư mục ảo IIS của. Sau đó, trong bộ điều khiển, chúng tôi có thể thực hiện return View("/Views/SharedVirtual/somefile.ascx",somemodel);. Nó cũng làm việc với RenderPartial.

Tại địa phương khi làm việc với các dự án tôi sử dụng mklink để tạo điểm giao nhau trong thư mục dự án ánh xạ tới thư mục chung dùng chung. Bằng cách đó VS nghĩ rằng thư mục là cục bộ khi không và có thể chạy dự án cục bộ để gỡ lỗi.

Chúng tôi thường không sử dụng Dao cạo nhưng khái niệm chỉ hoạt động giống như khi VS không thực hiện ánh xạ chia sẻ, hệ điều hành và IIS của nó. Một báo trước là nếu bạn chỉnh sửa chế độ xem, chúng sẽ thay đổi trong tất cả các dự án, do đó bạn phải cẩn thận với các chỉnh sửa của mình để đảm bảo chúng sẽ tương thích khi được sử dụng trên tất cả các dự án tham chiếu đến chúng.

+0

Cảm ơn @Wolfie. Bạn có thể xác nhận cho tôi sau đó, mklink cho mục đích địa phương sẽ ngồi dưới đường dẫn ~/Views thông thường trong dự án đó, nơi phần còn lại của các khung nhìn sống (trong các thư mục con tương ứng)? Bất kỳ trở ngại trong xuất bản từ Visual Studio cho thiết lập này? Tôi không ngay lập tức chắc chắn những gì tôi có thể mong đợi rào chắn - thư mục ảo được chia sẻ sẽ hoàn toàn mới đối với chúng tôi. –

+0

có. bản đồ bằng cách sử dụng mklink để gắn kết thư mục trong thư mục \ Views của dự án của bạn. Nhấp chuột phải vào thư mục được liên kết trong trình thám hiểm dự án VS và "Loại trừ". Xuất bản tất cả những gì bạn muốn. – Wolfie

3

Chế độ xem bạn muốn hiển thị bên ngoài gốc ứng dụng web. Điều này không được phép ít nhất vì lý do bảo mật.

Bạn có thể làm gì, tuy nhiên, là nhúng veiws (.cshtml) làm tài nguyên bằng cách chọn tác vụ tạo "Nhúng làm tài nguyên" thay vì tác vụ mặc định. Sau đó, sử dụng trình quản lý gói NuGet cài đặt và sử dụng Nhà cung cấp đường dẫn ảo có khả năng hiển thị các chế độ xem đã nhúng như here, here hoặc here.

0

ASP.NET MVC sẽ tìm trong cùng một hội đồng cho chế độ xem. Đưa View hoặc HTML vào một assembly khác sẽ rất khó xử cho khung công tác. Tôi không nghĩ rằng khung công tác hỗ trợ định vị View/HTML bên ngoài phạm vi của assembly. Bạn có thể cần phải viết một số mã tùy chỉnh hoặc mở rộng khung công tác, nguồn mở của nó.

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