2009-06-04 29 views
6

Tôi đã tạo một dự án ASP.net MVC mặc định. Trong trang Thầy tôi đã sau ở đầuCách thêm tệp js vào asp.net MVC và có đường dẫn hợp lệ trên tất cả các tuyến

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

sau đó tôi cần phải thêm một tập tin javascript và thêm các dòng như sau bằng cách kéo các tập tin từ cửa sổ solution explorer đến trang:

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

Khi tôi truy cập vào một trang web và nhìn vào html từ trình duyệt tôi thấy điều này:

<head><title> 

    Index 

</title><link href="Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

các tập tin CSS đường dẫn tương đối đã được cố định nhưng các tập tin JS không. Trang web sẽ được triển khai đến một thư mục khác trên máy chủ chứ không phải thư mục gốc mà tôi nhận được trên hộp phát triển của tôi.

Có cách nào phù hợp để thực hiện việc này không?

Trả lời

16

Sử dụng Helper Url:

<script type="text/javascript" src="<%=Url.Content("~/Content/script/MyFile.js")%>"></script> 

Hy vọng rằng sẽ giúp

+0

Điều này khắc phục sự cố với cài đặt trang web trong thư mục con vì ~ được thay thế bằng đường dẫn đến gốc của trang web. Nhưng vấn đề là khi tôi đến thư mục gốc, tệp js nằm trong thư mục Scripts dưới gốc và không ../../Scripts vẫn còn. Vì MVC sẽ định tuyến đến các thư mục con khác nhau nên kịch bản không phải là allways có sẵn từ tất cả các tuyến. Tôi đã cung cấp cho bạn +1 vì ít nhất giờ tôi có cách để mã hóa đường dẫn liên quan đến thư mục gốc. Nhưng tôi sẽ chờ đợi để xem liệu ai đó có thể giải thích lý do tại sao nó hoạt động cho CSS ra khỏi hộp chứ không phải cho JS. – jvanderh

+0

Tôi nghĩ rằng vấn đề không phải là css vs Javascript nhưng bạn chỉ đơn giản là có css của bạn bên trong thư mục conetne của bạn và không phải là kịch bản của bạn – Lewis

7

Bạn có thể tạo một phương pháp helper mà không một cái gì đó như thế này:

<%= Helper.IncludeJavascriptFile("Menu.js") %> 

và sau đó trong helper mà bạn làm điều gì đó như:

public string IncludeJavascriptFile(string fileName){ 
    return Url.Content("<root>/Javascript/Files/" + fileName); 
} 

Sau đó, bạn có thể gọi phương thức trợ giúp đó từ chế độ xem của bạn. Nếu bạn quyết định thay đổi vị trí của các tập tin, nó chỉ ở một vị trí bạn phải lo lắng về nó. Nếu bạn thay đổi tên của các tập tin, đó là một vấn đề khác nhau trong và của chính nó.

+1

+1 cho mantainability. – jvanderh

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