Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 如何引用ASP.NET MVC 2视图文件夹中的javascript文件?_Asp.net Mvc 2_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 2 如何引用ASP.NET MVC 2视图文件夹中的javascript文件?

Asp.net mvc 2 如何引用ASP.NET MVC 2视图文件夹中的javascript文件?,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc 2,Asp.net Mvc Routing,我试图适应一个公司标准,其中所有页面级别的javascript都包含在一个外部文件中,而不包含在ASPX或ASCX文件中。使用ASP.NET MVC 2,我想知道如何相对于视图引用脚本文件(.js) 换句话说,我不想将我的脚本文件夹与应用程序中存在的所有小.js文件混为一谈。从组织的角度来看,将.js文件与.aspx/.ascx文件放在一起最有意义。例如,如果我有一个名为“MyController”的控制器和一个名为“MyAction”的操作,我会在Views/MyController文件夹中有

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

换句话说,我不想将我的脚本文件夹与应用程序中存在的所有小.js文件混为一谈。从组织的角度来看,将.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

更新


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

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

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

编辑: 您可能想查看以下内容:了解ASP.NET MVC如何直接访问文件,以及以下内容:了解为什么视图文件夹中的脚本可能无法直接访问

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

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

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


转到“视图”文件夹中的web.config。正如您所看到的,我不确定处理程序将是什么类型,以允许直接访问。继续添加它而不使用处理程序类型,您将看到当您尝试访问.js文件时,它正在被调用

我也更喜欢将只属于某个特定视图的脚本保存在
视图
文件夹中,这样这些脚本就不会污染我的
脚本
,我为全局访问的脚本保留了这些脚本。我发现这个问题的最短解决方案如下:

从以下内容更改
web.config
中的
httpHandlers

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


对于他发布的这个解决方案。

我很确定您可以使用路由为引用的任何*.js文件提供服务,但我现在没有时间查看它。祝你好运是的,你说得对,我不想破坏阻止直接访问我的aspx和ascx文件的正常路由规则。我可以打开*.js文件吗?安德斯建议我这样做。我一直在等着看是否有人会插话帮助回答这个问题。不幸的是,“不确定你是什么类型”并没有让我走得很远。对不起。我希望有人也能加入进来。有人告诉我,你需要为此编写一个自定义处理程序。你不需要自定义处理程序。它是System.Web.StaticFileHandler查看本文了解详细信息
<httpHandlers>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<script type="text/javascript" src="~/Views/<ControllerName>/script.js"></script>