2010-01-20 51 views
11

Tôi có trang cái trong/Views/Shared. Trang chính tham chiếu biểu định kiểu trong thư mục /Content.ASP.NET MVC - Tham chiếu bảng định kiểu trong trang cái

Mọi thứ hoạt động tốt nếu tôi tham khảo biểu định kiểu bằng cách sử dụng "../../Content/style.css". Tuy nhiên, ứng dụng web của tôi không nằm trong thư mục gốc trong môi trường sản xuất của chúng tôi, do đó đường dẫn tương đối không hoạt động.

Tôi đã thử "<% = ResolveUrl (" ~/content/style.css ")%>" hoạt động trong kịch bản sản xuất, nhưng sau đó nhà thiết kế trong Visual Studio phàn nàn về các lớp của tôi sai (và tôi không thể xem trước trang bằng CSS trong tab thiết kế).

Có giải pháp nào làm cho công việc này trong cả hai trường hợp? Tôi đã thực hiện điều này trong WebForms bằng cách viết mã phía máy chủ để đặt lại thẻ liên kết. Tôi có thể làm điều đó ở đây, nhưng tôi muốn tránh nó.

+0

* "ứng dụng web của tôi không nằm trong thư mục gốc" * ... Đường dẫn tương đối không tham chiếu thư mục gốc, vì vậy tôi không chắc tại sao điều này lại quan trọng. Bạn có chắc chắn thư mục Nội dung của bạn nằm trong cùng một vị trí ** tương đối ** trên máy chủ sản xuất không? –

+0

Đường dẫn tương đối giống nhau trong cả sản xuất và phát triển. Đường dẫn tương đối là chính xác khi nó tương đối so với trang chính. Tuy nhiên, đường dẫn không liên quan đến trang sử dụng trang chính, đó là đường dẫn mà trình duyệt của người dùng sử dụng. –

Trả lời

8

Thử kỹ thuật này - bao gồm biểu định kiểu của bạn cả hai cách. Bao gồm một tham chiếu đường dẫn cố định mà Visual Studio sẽ sử dụng để hỗ trợ thiết kế thời gian, nhưng kèm theo nó trong các nhận xét phía máy chủ để nó không thực sự được bao gồm trong thời gian chạy. Tham chiếu thứ hai là tham chiếu "thực" được sử dụng trong thời gian chạy, và với Url.Content() nó sẽ làm việc cho dù ứng dụng của bạn là một thư mục con hay không.

<% /* %> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
<% */ %> 

<link href="<%=Url.Content("~/Content/Site.css") %>" rel="stylesheet" 
     type="text/css" /> 
+0

+1 Kỹ thuật thú vị! Tôi sẽ sử dụng T4MVC để làm điều này là tốt. –

+0

Tôi thích ý tưởng này. Đó là một công việc xung quanh, nhưng nó đáp ứng cả hai yêu cầu. Nó sẽ được tốt đẹp nếu các nhà thiết kế ASPX sẽ phân tích mã phía máy chủ khi xem trước trang. –

+0

Bạn cũng có thể tạo liên kết tĩnh runat = "server" visible = "false", phần nào đơn giản hơn. –

6

Cách tốt nhất là Extend the URL Helper. Điều này cho phép bạn dễ dàng gọi nó từ chế độ xem của bạn và nếu cấu trúc hoặc tệp của bạn thay đổi, bạn không cần phải tìm kiếm/thay thế lớn.

public static string Image(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Images/" + fileName)); 
} 

public static string Stylesheet(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Stylesheets/" + fileName); 
} 

public static string Script(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Scripts/" + fileName); 
} 

    <link href="<%= UrlHelper.Stylesheet("Main.css")%>" rel="stylesheet" 
     type="text/css" /> 
+0

Tại sao đây là phương pháp hay nhất? –

+0

để bạn có thể dễ dàng tham khảo trong chế độ xem của bạn và nếu có bất kỳ thay đổi nào trong số đó, bạn không phải thực hiện tìm/thay thế. – Martin

+0

Tôi hiểu điểm của bạn, nhưng nó không giải quyết được vấn đề của nhà thiết kế VS không giải quyết được vị trí CSS. –

0

Trong thư mục Chế độ xem và sau đó đi sâu vào Thư mục được chia sẻ, hãy hiểu cách tệp CSS được tham chiếu trong MVC.

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