2009-06-04 138 views
6

我創建了一個默認的ASP.net MVC項目。在母版頁我已在頂部如何在asp.net MVC中包含js文件並在所有路徑上都有一個有效路徑

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

然後我需要添加一個JavaScript文件,並添加了一行從Solution Explorer拖動文件到頁面如下:

<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> 

當我訪問該網站,看看從瀏覽器的HTML我看到這一點:

<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> 

CSS文件相對路徑是固定的,而JS文件沒有。該網站將部署到服務器上的另一個文件夾,而不是我在開發框中獲得的根目錄。

有沒有適當的方法來做到這一點?

回答

16

使用URL助手:

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

希望幫助

+0

這解決了將網站安裝到子目錄中時的問題,因爲〜被替換爲網站根目錄的路徑。 但問題是,當我到達根的js文件是在根目錄下的腳本文件夾中,而不是../../Scripts仍然存在。由於MVC將路由到不同的子文件夾,因此該腳本不是從所有路線都可用的。 我給你+1因爲至少現在我有一種方式來硬編碼相對於根的路徑。但是我會拭目以待,看看有人能夠解釋爲什麼它適用於開箱即用的CSS,而不是JS。 – jvanderh 2009-06-04 16:38:56

+0

我認爲這個問題不是css vs Javascript,但是你只需將你的css放在你的conetne文件夾中,而不是你的腳本 – Lewis 2009-06-04 16:51:29

7

您可以創建,做這樣的一個輔助方法:

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

,然後在幫助你做一些事情如:

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

然後,您可以從您的視圖中調用該輔助方法。如果您決定更改文件的位置,則只能在一個位置上擔心。如果您更改文件的名稱,那麼這本身就是一個不同的問題。