处理ASP.Net和Masterpages中的相关文件路径

问题描述:

这可能是一个痛苦的简单问题,我将被嘲笑,但是我在使用masterpages中的文件路径时遇到困难。我相信这是因为如果一个子目录中的页面使用母版页,那么文件路径不正确。处理ASP.Net和Masterpages中的相关文件路径

要解决这个问题,我需要从根获得文件路径,但我似乎无法得到它的工作。

我想:

  <script type="text/javascript" src="~/jQueryScripts/jquery.js"></script> 

  <script type="text/javascript" src="../jQueryScripts/jquery.js"></script> 

没有运气要么!

有关如何告诉它从根获取文件路径的任何想法?谢谢:)

我只是假设通过filepath,你实际上意味着URL(或uri,我忘记哪一个是部分)。

没有〜,第一个例子应该工作。 <script type="text/javascript" src="/jQueryScripts/jquery.js"></script>将导致浏览器请求http://www.example.com/jQueryScripts/jquery.js(其中www.example.com是您的域名)。

我相信你需要在的<head>标记中有runat=server这个URL重定位工作。

<head runat="server"> 
+0

呀,已经有了。没有运气:( – Damien 2008-11-12 14:45:00

+0

那么,至少你对于被问到一个“痛苦简单”问题“嘲笑”的理解是没有根据的,结果是一个具有挑战性的问题,这是一个很好的问题。 – DOK 2008-11-12 15:09:07

如果您运行的是支持AJAX的站点,请参阅我对Preferred way to include relative reference to JavaScript in VS 2008 nested Masterpage的回答。

+0

干杯!做到了! – Damien 2008-11-12 15:08:18

首先,前面的波浪号是用于服务器控件的asp.net事物,不适用于基本的HTML。

在没有详细解释的情况下,您可以在前面使用斜杠(/),并且包含Web应用程序名称(如果它不是根站点)。

或者您可以将代码放入您的母版页中以动态包含脚本,并让它处理路径。像:

public void AddJavascript(string javascriptUrl) 
    { 
     HtmlGenericControl script = new HtmlGenericControl("script"); 
     script.Attributes.Add("type", "text/javascript"); 
     javascriptUrl += "?v" + Assembly.GetExecutingAssembly().GetName().Version; 
     script.Attributes.Add("src", ResolveUrl(javascriptUrl)); 
     Page.Header.Controls.Add(script); 
    } 

上面的代码还附加了程序集版本。我主要用这种方式进行开发,所以每次构建时我的JavaScript文件都会更新。

您可以使用Page.ResolveUrl方法来解决这个问题

例如:

<script type="text/javascript" src="<%=Page.ResolveUrl("~/jQueryScripts/jquery.js")%>"></script>