【发布时间】:2015-01-02 17:39:46
【问题描述】:
我正在将 JavaScript 库集成到 ASP.NET MVC3 Web 应用程序中。该库假定它将安装在引用它的页面旁边,因此它使用文档相对 URL 来查找其组件。
例如,默认的目录布局是这样的
container-page.html
jslibrary/
library.js
images/
icon.png
extensions/
extension.js
extension-icon.png
但是,我想从 /Home/edit 的视图中引用该库。我将库安装在默认Scripts\jslibrary\ 中当我在Views\Home\edit.cshtml 的视图中引用库时,库的文档相关链接如
images/icon.png
以请求结束
http://localhost/Home/images/icon.png
这会导致找不到文件 (404) 错误。如何构建查找路径
{anyControllerName}/images/{anyRemainingPathInfo}
上菜
http://localhost/Scripts/jslibrary/images/{anyRemainingPathInfo}
?
(完全披露:我仍在生产中使用 IIS 6,短期内使用 IIS7 的机会不大,所以如果在 IIS 级别做得更好,请考虑 IIS6。谢谢!)
【问题讨论】:
-
明确一点:从
~/Views/Home/Edit.cshtml你想引用~/Scripts/Home/Edit/jslibrary/? -
没关系,但理想情况下我希望
~/Views/Home/Edit.cshtml引用~/Scripts/jslibrary/——在 JS 库的路径中没有代表控制器/动作的目录。这样,可以从多个视图轻松引用 JS 库。问题是 JS lib 有内部相对引用,例如./somefile.js当视图在路由 URL 下加载时,它成为/Home/Edit/jslibrary/somefile.js的引用,我需要将其重写为/Scripts/jslibrary/somefile.js -
Erm 那么是什么阻止您使用
Url.Content助手?喜欢<script type="text/javascript" src="@Url.Content("~/scripts/jslibrary/foo.js")"></script>?我不明白这里有什么问题。在您的问题中,您似乎在谈论一些图像。您在哪里以及如何引用这些图像?如果您从 CSS 中引用它们,只需使用相对(相对于 .css 文件)路径。如果您使用<img>标记从您的视图中引用它们,那么只需再次使用Url.Content帮助器。 -
@Darin,jslib 对 PNG 和其他 .JS 文件有脚本相关的引用。
-
为什么不重新组织您的代码,以便将这些 url 作为参数从主视图传递?当前如何引用那些 PNG 和 JS 资源?目的是什么?
标签: asp.net-mvc-3 routes