2015-09-19 17 views
5

Với Asp .Net 5 beta 6 trình trợ giúp thẻ không giải quyết khi chế độ xem nằm bên ngoài thư mục Views. Cấu trúc thư mục mà tôi muốn là dựa trên chức năng chứ không phải là trên các loại tệp. Bộ điều khiển, xem các mô hình và khung nhìn cho một chức năng cụ thể mà tôi muốn nhóm lại với nhau trong một thư mục phản ánh tên bộ điều khiển. Dưới đây là một ví dụ về cấu trúc thư mục mà tôi muốn trong dự án:Trình trợ giúp thẻ không giải quyết khi chế độ xem nằm ngoài thư mục Chế độ xem

UI 
    - Account 
     - AccountController.cs 
     - AccountViewModels.cs 
     - Login.cshtml 
     - Register.cshtml 
    - Students 
     - StudentsController.cs 
     - StudentsViewModels.cs 
     - CaptureStudent.cshtml 

Để thực hiện điều này tôi đã tạo ra một công cụ xem tùy chỉnh:

public class CustomUIViewEngine : RazorViewEngine 
{ 
    public CustomUIViewEngine(IRazorPageFactory pageFactory, 
     IRazorViewFactory viewFactory, 
     IOptions<RazorViewEngineOptions> optionsAccessor, 
     IViewLocationCache viewLocationCache) : 
     base(pageFactory, viewFactory, optionsAccessor, viewLocationCache) 
    { 
    } 
    public override IEnumerable<string> ViewLocationFormats 
    { 
     get 
     { 
      var viewLocationFormats = base.ViewLocationFormats 
      .Union(new string[] { "~/UI/{1}/{0}.cshtml" }); 
      return viewLocationFormats; 
     } 
    } 
} 

Mà tôi đăng ký ở startup.cs như sau:

services.AddMvc().ConfigureMvcViews(options => 
     { 
      options.ViewEngines.Clear(); 
      options.ViewEngines.Add(typeof(CustomUIViewEngine)); 
     }); 

Công cụ xem tùy chỉnh này hoạt động và chế độ xem được định vị và hiển thị, với vấn đề duy nhất là tag helpers không được hiển thị chính xác d, nên thay vì nhìn thấy điều này:

<form method="post" class="form-horizontal" role="form" action="/Account/Login"> 

Tôi thấy điều này trong nguồn hiển thị:

<form asp-controller="Account" asp-action="Login" method="post" class="form-horizontal" role="form"> 

Có ai biết lý do tại sao tag helpers không hiển thị chính xác khi xem nằm ngoài thư mục xem và nếu có cách nào để sửa lỗi này trong ứng dụng web Asp.Net 5?

Trả lời

2

Bạn đang thêm số TH của mình vào tệp _ViewImports và nếu có, hãy đọc bằng cách sử dụng câu lệnh? Bạn đã thử thêm trực tiếp @addTagHelper vào chế độ xem chưa?

Một số điều này được đề cập trong số Authoring Tag Helpers Tôi đi sâu vào chi tiết về phân cấp thừa kế, thêm, xóa trong bài viết sắp tới.

+1

Cảm ơn sự giúp đỡ RickAnd. :) Có, thêm chỉ thị @addTagHelper vào chế độ xem đã giải quyết sự cố khi di chuyển thư mục _ViewImports từ vị trí mặc định của nó đến thư mục gốc của thư mục UI của tôi. Đã giải quyết được sự cố. Cảm ơn! – BruceHill

+0

@BruceHill tuyệt vời. Bạn có nhớ đánh dấu câu hỏi này là câu hỏi được trả lời không? – RickAndMSFT

+1

Sẽ hữu ích nếu tài liệu có thể bao gồm một số thông tin khác về vị trí tệp có thể có của '_ViewImports' nếu bạn không sử dụng cấu trúc dự án mặc định (ví dụ: nếu tất cả các chế độ xem không nằm trong thư mục' Views' phổ biến?). Có vẻ như nếu bạn đặt '_ViewImports' vào thư mục gốc của dự án, nó sẽ áp dụng cho tất cả các khung nhìn trong tất cả các thư mục, do đó, điều này xử lý kịch bản đó, nhưng các tài liệu hiện tại dường như chưa bao hàm. – cbranch

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