Asp MVC 3:动态解析视图中的相对资源

时间:2011-03-24 08:01:29

标签: asp.net-mvc dynamic asp.net-mvc-3 routing relative-path

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

问题:
问题是所有相对路径相对于当前网址 ,这在简单的html webapp中是可以的,但在asp mvc中则没有。 js-app不应该打扰它是在普通的html文件中提供还是通过asp mvc页面提供。

即。 http://www.domain.com/<controller>/<action>/包含一个脚本 test.js 。此脚本加载相对于它的外部xml文件,即。 “的数据/ data.xml中”。生成的网址会显示http://www.domain.com/<controller>/<action>/data/data.xml。找不到。

问题:
有没有办法将静态文件(图像,...,甚至是js文件)路由到内容文件夹,如“〜/ Content / controller / action /&lt; pathToFile&gt; / ”?

任何帮助表示赞赏!

LG warappa

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

2 个答案:

答案 0 :(得分:2)

解决方案不需要映射 - 标题中只有一个简单的html标记:

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

LG warappa

修改
有些浏览器需要一个绝对的网址 - 样本已更新。

答案 1 :(得分:1)

您可以使用绝对URL地址访问静态资源:

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

<script src="/Scripts/script.js"></script>

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

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