【问题标题】:How to reference javascript file in ASP.NET MVC 2 Views folder?如何在 ASP.NET MVC 2 Views 文件夹中引用 javascript 文件?
【发布时间】:2011-08-16 23:14:19
【问题描述】:

我正在尝试适应一个公司标准,其中所有页面级 javascript 都包含在外部文件中,而不包含在 ASPX 或 ASCX 文件中。使用 ASP.NET MVC 2,我想知道如何引用相对于视图的脚本文件 (.js)。

换句话说,我不想用应用程序中存在的所有小的 .js 文件来污染我的 Scripts 文件夹。从组织的角度来看,将 .js 文件与 .aspx/.ascx 文件放在一起是最有意义的。例如,如果我有一个名为“MyController”的控制器和一个名为“MyAction”的操作,我将在 Views/MyController 文件夹中有一个 MyAction.aspx 文件,并希望将名为“MyAction.js”的脚本文件放在同一个文件夹。但是,我不能使用:

<script src="MyAction.js" type="text/javascript"></script>

这似乎也不起作用:

<script src="<%= Url.Content("~/Views/MyController/MyAction.js") %>"
        type="text/javascript"></script>

所以我猜测问题可能与路由表有关,但我仍然是 MVC 新手,所以我不确定。

第二个问题,是否可以像使用传统 ASP.NET 一样将 javascript 作为资源嵌入并在我们的客户端页面中生成非人类可读的 url?

更新

我只能假设这个问题已经过时,这就是为什么没有其他人提供任何答案的原因。我不敢相信这是一个如此困难的问题。所以,我想我会添加这个小更新,看看我是否可以恢复对话。

【问题讨论】:

  • 我很确定您可以使用路由来提供任何引用的 *.js 文件,但我现在没有时间检查它。祝你好运!

标签: asp.net-mvc-2 asp.net-mvc-routing


【解决方案1】:

你是对的,这是因为 MVC 路由。请记住,如果您公开 Views 文件夹以包含 JavaScript 文件,它也会公开您的 Views(虽然不应该,但可能包含一些前端逻辑)。

我个人会使用脚本文件夹并在那里创建子文件夹。

编辑: 可能想看这里:ASP.NET MVC routing and static data (ie. images, scripts, etc) 了解 ASP.NET MVC 如何直接访问文件,这里:http://haacked.com/archive/2008/02/12/asp.net-mvc-blocking-direct-access-to-views.aspx 了解为什么您的 Views 文件夹中的脚本可能无法直接访问。

如果您的 Views 文件夹中有 web.config 并且按照第二个链接中描述的方式进行配置,则对 Views 文件夹的所有外部请求都将返回 404。

编辑2: 您应该只能通过添加以下内容来允许访问 JavaScript:

<httpHandlers>
    <add path="*.js" verb="*" type="System.Web.StaticFileHandler"/>
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler" />
</httpHandlers>

到您的 Views 文件夹中的 web.config。如您所见,我不确定处理程序将允许直接访问的类型。继续添加它而不添加处理程序类型,当您尝试访问 .js 文件时,您会看到它正在被调用

【讨论】:

  • 是的,你说得对,我不想破坏阻止直接访问我的 aspx 和 ascx 文件的正常路由规则。我可以只打开 *.js 文件和 Anders 的建议吗?
  • 我一直在等待,看看是否有其他人愿意帮忙回答这个问题。不幸的是,“NOT_SURE_WHAT_TYPE”并没有让我走得太远。
  • 对不起。我希望有人也能插话。
  • 有人告诉我,你需要为此编写一个自定义处理程序。
  • 您不需要自定义处理程序。它是 System.Web.StaticFileHandler 查看这篇文章了解详细信息stackoverflow.com/questions/604883/…
【解决方案2】:

我还更喜欢将仅与特定视图相关的脚本保留在 Views 文件夹中,这样这些脚本就不会污染我为全局访问的脚本保留的 Scripts。我发现的这个问题的最短解决方案如下:

从这里更改web.config 中的httpHandlers

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

到这里:

<httpHandlers>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

就是这样。现在您可以将 Javascripts 放在您的视图文件夹中并像这样链接它们:

<script type="text/javascript" src="~/Views/<ControllerName>/script.js"></script>

感谢Vadym Nikolaiev 为他发布的这个解决方案here

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多