这个问题是基于一个名为“ASP.NET MVC相对路径”的类似问题,位于here。
我理解在开发ASP.NET应用程序时,尤其是ASP.NET MVC应用程序,会出现有关绝对路径和相对路径的问题。在整个应用程序生命周期中,我一直在使用类似于以下内容来解析ASPX页面中的路径:
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>"></script>
我无法将路径保留为相对路径,因为它正在从开发层移动到暂存层到生产层,并且它可能位于IIS中略有不同的文件夹结构中。
然而,我的问题是,我可以对Javascript文件中的相对路径做些什么?他们怎么解决?到目前为止,我已经将每个页面的Javascript嵌入到页面本身中,因此我可以使用类似于上面的方法来解析URL。这导致Javascript看起来像这样:
$(function() {
$.getJSON('<%= Url.Content("~/home/test/1") %>', null, function(data) {
// Do stuff in here
});
});
这当然可以正常工作,直到我将所有内容移出ASP.NET页面并进入位于中心的Javascript文件。正如前面提到的question所建议的那样:
或者您可以使用document.location.host 构建完全限定的路径名 在javascript中: document.location.host + “/Content/Images/MyImage.jpg”
另一种方法是使用ASP.NET 构建脚本的这一部分 动态地使完全 注入了合格的路径名。你 可以通过使用来做到这一点 ScriptManager.RegisterStartupScript或 ScriptManager.RegisterScriptBlock
该应用程序是一个相当沉重的Javascript用户,所以我不确定第二个选项是否会起作用。除了第一个选项之外,还有更优雅的方法来解决此问题吗?你们有什么办法来解决这个问题?任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
一种方法是让你的JS脚本引用一个对象,这个对象将在包含你需要的相对路径的view / partial中构造。然后,您的JS文件代码可以使用此对象根据需要实例化路径。
有点痛苦,但这会起作用,如:
var paths =
{
imagePath: '<%= Url.Content("~/Content/Images/MyImage.jpg") %>'
}
var obj = myJSFileObject.Load(paths);
//continue
HTH
答案 1 :(得分:0)
虽然我还没有使用MVC,但我的Page类有一个脚本路径集合,在呈现时会自动添加到HTML页面的顶部或底部(如果适用)。
一些脚本文件由Page类本身从每个页面需要的应用程序范围的脚本列表中注册,其他脚本文件由各个页面注册。
在任何一种情况下,注册都是这样的:
MyPage.AddScriptBlock(Path:="{apppath}scripts/myscript.js", LoadAtTop:=True)
Page类对它进行快速搜索/替换,因为它在渲染时会为它们生成SCRIPT标记:
Writer.Write(New JavascriptBlock( _
thisscript.Path.Replace("{apppath}", AppPath()))
AppPath()函数如下所示:
Private Shared pvtAppPath As String
Public Shared Function AppPath() As String
If pvtAppPath="" Then
With System.Web.HttpContext.Current.Request
pvtAppPath = "http://" & .Url.Host & .ApplicationPath
End With
If Not pvtAppPath.EndsWith("/") Then pvtAppPath &= "/"
End If
Return pvtAppPath
End Function
这为我提供了我需要的所有功能:
我不确切知道这与MVC有什么关系,但希望它会给你一些想法。