Asp.net mvc Asp MVC 3:动态解析视图中的相关资源

Asp.net mvc Asp MVC 3:动态解析视图中的相关资源,asp.net-mvc,dynamic,asp.net-mvc-3,routing,relative-path,Asp.net Mvc,Dynamic,Asp.net Mvc 3,Routing,Relative Path,我有一个javascript应用程序,它在视图(index.cshtml)中运行 问题: 问题是所有的相对路径都是相对于当前url的相对路径,这在简单的html webapp中是可以的,但在asp mvc中则不行。js应用程序不必担心它是在普通html文件中还是通过asp mvc页面提供的 即,包含脚本test.js。此脚本加载与之相关的外部xml文件搜索,即“data/data.xml”。结果url读取。找不到这个 问题: 是否有办法将静态文件(图像,…,甚至可能是js文件)路由到内容文件夹,

我有一个javascript应用程序,它在视图(index.cshtml)中运行

问题:
问题是所有的相对路径都是相对于当前url的相对路径,这在简单的html webapp中是可以的,但在asp mvc中则不行。js应用程序不必担心它是在普通html文件中还是通过asp mvc页面提供的

即,包含脚本test.js
。此脚本加载与之相关的外部xml文件搜索,即“data/data.xml”。结果url读取。找不到这个

问题:
是否有办法将静态文件(图像,…,甚至可能是js文件)路由到内容文件夹,如“~/content/controller/action/

感谢您的帮助

Lg 瓦拉帕


我知道Url.Content(),但这不适合这里。

在中,您可以使用绝对Url地址访问静态资源:

$('img').attr('src', '/Content/Pictures/picture1.png');


通过这种方式,无论您是在
/{Controller}/{Action}/{View}
{Area}/{Controller}/{Action}/{View}
中加载脚本,还是在静态脚本html页面中加载脚本,您都将获得与页面基址相关的相同资源


或者,您正在寻找的可能是css文件的使用,因为css的
url(“”)
解析相对于css文件位置的地址。您只需要导入一个具有所有资源(图像?)文件路径的CSS文件。然后脚本可以引用不同的类名,因此根本不知道位置。这就是像jqueryui这样的库所做的。但这同样需要一个相对于CSS文档的固定文件夹结构。

解决方案不需要映射,只需要在标题中添加一个简单的html标记:

<base href="@(Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + 
    Url.Content("~/content/controller/action/"))" />

Lg 瓦拉帕

编辑

有些浏览器需要绝对url-示例更新。

当然,但应用程序会知道它的位置(“所以我在Asp MVC webapp中…”)。我正在寻找一个解决方案,重新组装一个简单的html行为。无论如何,谢谢不,它不知道这是一个Asp.net MVC应用程序,它只是有一个必需的结构。如果需要,您可以在php脚本中使用相同的脚本,但是您需要保留静态文件目录。我更喜欢js应用程序只“看到”css/style.css或“images/background.jpg”相对路径的解决方案。起始斜杠的另一个问题是,您希望它不在虚拟路径中,这在我的特例中是错误的。
<base href="@(Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + 
    Url.Content("~/content/controller/action/"))" />