【问题标题】:Asp MVC 3: Dynamically resolve relative resources in viewsAsp MVC 3:动态解析视图中的相关资源
【发布时间】:2011-03-24 08:01:29
【问题描述】:

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

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

http://www.domain.com/<controller>/<action>/ 包含一个脚本 test.js。此脚本加载一个外部 xml 文件,相对于它进行搜索,即。 “数据/data.xml”。生成的 url 显示为 http://www.domain.com/<controller>/<action>/data/data.xml。没有找到。

问题:
有没有办法将静态文件(图像,...,甚至可能是 js 文件)路由到“~/Content/controller/action//”之类的内容文件夹?

任何帮助表示赞赏!

Lg 瓦拉帕

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

【问题讨论】:

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


    【解决方案1】:

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

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

    Lg 瓦拉帕

    编辑
    某些浏览器需要绝对 URL - 示例已更新。

    【讨论】:

      【解决方案2】:

      在你可以使用绝对 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('&lt;path&gt;') 会解析相对于 CSS 文件位置的地址。您只需要导入一个包含所有资源(图像?)文件路径的 CSS 文件。然后脚本可以引用不同的类名,因此根本不知道位置。这就是像 jQuery UI 这样的库所做的。但这同样需要一个相对于 CSS 文档的固定文件夹结构。

      【讨论】:

      • 当然,但应用程序知道它的位置(“所以我在 Asp MVC webapp...”)。我正在寻找一种重新组合纯 html 行为的解决方案。还是谢谢
      • 不,它不知道它是一个 Asp.net MVC 应用程序,它只是具有所需的结构。如果需要,您可以在 php 脚本中使用相同的脚本,但您需要保留静态文件目录。
      • 好吧,我不够精确。我更喜欢一个解决方案,其中 js-app 只是“看到”“css/style.css”或“images/background.jpg” - 相对路径。起始斜线的另一个问题是您希望它不在虚拟路径中 - 在我的特殊情况下这是错误的。
      猜你喜欢
      • 1970-01-01
      • 2018-05-29
      • 2012-05-12
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2018-09-17
      相关资源
      最近更新 更多