2009-06-04 137 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); 
} 

然后,您可以从您的视图中调用该辅助方法。如果您决定更改文件的位置,则只能在一个位置上担心。如果您更改文件的名称,那么这本身就是一个不同的问题。