2011-04-18 41 views
16

Tôi đang cố gắng sử dụng các khung nhìn di động với ASP.NET MVC 3 và các khung nhìn dao cạo vì điều đó dường như là cách tốt nhất để tạo ra một kiến ​​trúc plug-in dễ dàng. Vì vậy, tôi có thiết lập thư viện lớp của tôi và tôi có quan điểm của tôi nằm trong /Views/Admin/Index.cshtml và nó được thiết lập như một tài nguyên nhúng. Sau đó, tôi đưa dự án đó làm phụ thuộc cho dự án ứng dụng web chính. Khi tôi cố gắng truy cập vào bộ điều khiển quản trị, hành động Index tôi nhận được một tin nhắn mà không thể tìm thấy tập tin xem đó (vì vậy bộ điều khiển được bao gồm đúng). Tôi giả sử nó đang cố gắng tìm trong dự án ứng dụng web chính và không phải là các khu vực di động nhị phân. Có cách nào để có được chế độ xem dao cạo để làm việc với các khu vực di động không?ASP.NET MVC 3, Razor Views, và Portable Portable

Trả lời

0

Bạn đã đảm bảo rằng bạn đã đánh dấu Chế độ xem là Tài nguyên được nhúng trong Khu vực di động của bạn? Ngoài ra tôi thấy rằng tính năng tốt đẹp của khu vực di động là bạn có thể ghi đè các Chế độ xem được nhúng, vì vậy nếu bạn Đặt Chế độ xem trong Ứng dụng máy chủ có cùng tên và Vị trí của chế độ nhúng với Logic mã khác nhau, nó sẽ được ưu tiên hơn một trong những nhúng tốt đẹp !!!

Hy vọng điều này sẽ giúp

+0

Tôi cho rằng điều đó phụ thuộc vào thứ tự của các công cụ xem đã đăng ký, nếu công cụ xem được nhúng lần đầu tiên, chế độ xem khu vực di động sẽ ghi đè các chế độ xem thông thường trong dự án gốc. Như một lưu ý phụ tôi sẽ nói đôi khi bạn có thể đạt được hiệu suất nhỏ bằng cách xóa tất cả các công cụ xem của bạn và đảm bảo rằng bạn chỉ đăng ký những cái bạn sử dụng trong dự án của mình. Xem http://insightpassion.com/norbertraus/index.php/2011/04/29/razor-views-performance/ – JohannesH

12

Tôi đã gặp khó khăn trong vấn đề này một thời gian, nhưng tôi nghĩ cuối cùng tôi đã tìm ra.

Cấu trúc thư mục và cách không gian tên được gọi bên trong dự án của bạn là rất quan trọng để điều này hoạt động bình thường!

Tôi có một ví dụ làm việc của một Khu vực di động với tầm dao cạo nhúng ở đây:

https://github.com/fretje/MembershipStarterKit

Hãy nhìn vào cấu trúc của dự án.

Tên của khu vực là UserAdministration và có lớp UserAdministrationRegistration trong thư mục gốc của dự án, nằm trong không gian tên UserAdministration. Sau đó, có một thư mục Controllers, ModelsViews (giống như một dự án MVC bình thường) và dưới thư mục Views, lại có một thư mục UserAdministration chứa các chế độ xem cho khu vực.

Ngoài ra một cái gì đó khác rất quan trọng cho chế độ xem nhúng hoạt động: bạn phải đăng ký công cụ xem mới trong phương thức Application_Start của tệp global.asax.cs, bạn đã làm điều đó chưa?

PortableAreaRegistration.RegisterEmbeddedViewEngine(); 

Và ... Trong lớp đăng ký của bạn, hãy chắc chắn bạn ghi đè lên các phương pháp RegisterArea mà mất 2 thông số (AreaRegistrationContext contextIApplicationBus bus), và gọi việc thực hiện cơ sở trong đó:

public override void RegisterArea(AreaRegistrationContext context, 
    IApplicationBus bus) 
{ 
    base.RegisterArea(context, bus); // <== very important! 

    context.MapRoute(
     "UserAdministration", 
     AreaName + "/{controller}/{action}/{id}", 
     new { controller = "UserAdministration", action = "Index", 
       id = UrlParameter.Optional } 
    ); 
} 

Nếu bạn không gọi triển khai cơ sở, bạn phải thêm ít nhất

RegisterAreaEmbeddedResources(); 

Để đảm bảo rằng chế độ xem và tài nguyên được nhúng của bạn được đăng ký.

+0

Cảm ơn câu trả lời này, chính xác những gì tôi đang tìm kiếm. Tôi vẫn nhận được lỗi xem không tìm thấy. Nó được thiết lập như nhúng nhưng vẫn không có gì. – Pieter

+0

Tôi đã phải thêm một tham chiếu gói nuget vào EmbeddedResourceVirtualPathProvider trong trang web của tôi để làm việc này. – Pieter

+0

Điều này trông giống hệt với những gì tôi có. Nó hoạt động tốt trên máy dev của tôi, nhưng nó không thực sự tìm kiếm các tập tin xem khi được triển khai. Tôi đã đăng nhập các khung nhìn mà nó tìm kiếm, và nó bỏ qua các tệp .cshtml hoàn toàn, mặc dù nó đã tìm thấy các tệp đó cho _layout và _viewstart. –

1

tôi đã làm việc này bằng cách làm theo các hướng dẫn trong câu trả lời fretje 's và sau đó cũng có thêm một tài liệu tham khảo gói NuGet để EmbeddedResourceVirtualPathProvider trong website của bạn.

+0

Chỉ cần tham khảo? Bạn đã làm gì để móc nó lên? –

+1

Trong Visual Studio, nhấp chuột phải vào các tham chiếu trong Solution Explorer và chọn "Thêm tham chiếu gói thư viện". Chọn "trực tuyến" trong cửa sổ bật lên và tìm kiếm "EmbeddedResourceVirtualPathProvider" rồi nhấp vào cài đặt. Lưu ý rằng bạn cần VS2010 đã được cập nhật lên Gói Dịch vụ 1 cho trình cài đặt gói Nuget là một phần của nó. – Pieter

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