2011-05-02 78 views
3

我试图容纳一个企业标准,其中所有页面级别的JavaScript都包含在外部文件中,并且不包含在ASPX或ASCX文件中。使用ASP.NET MVC 2,我想知道如何引用相对于视图的脚本文件(.js)。如何在ASP.NET MVC 2 Views文件夹中引用JavaScript文件?

换句话说,我不想用应用程序中存在的所有小型.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?

UPDATE

我只能假设,这个问题已变得陈旧这就是为什么没有其他人提供任何答案。我无法相信这是一个难题。所以,我想我会添加这个小小的更新,看看我是否可以恢复对话。

+0

我敢肯定,您可以使用路由来为任何引用的* .js文件提供服务,但我现在没有时间查看它。祝你好运! – 2011-05-02 13:29:06

回答

1

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

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

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

如果你对你有一个web.config视图文件夹,它的配置在第二环节中描述的方式,那么所有的外部请求查看文件夹将返回404

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

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

在您的Views文件夹中的web.config。正如你所看到的,我不确定什么类型的处理程序将允许直接访问。继续添加它没有处理程序类型,你会看到它被称为当你试图访问.js文件

+0

是的,你是对的,我不想破坏阻止直接访问我的aspx和ascx文件的正常路由规则。我可以打开* .js文件并且安德斯建议吗? – SonOfPirate 2011-05-02 13:36:59

+0

我编辑了我的答案(第二编辑) – LukeP 2011-05-02 13:49:39

+0

我一直在等着看看是否有人会帮助回答问题。不幸的是,“NOT_SURE_WHAT_TYPE”并没有让我走得很远。 – SonOfPirate 2011-05-12 12:33:07

0

我也更喜欢保留我的脚本,只涉及Views文件夹内的特定视图,以便这些脚本不会污染我为全球访问的脚本保留的Scripts。最短的解决这个问题,我发现如下:

变化,从这个在您的web.confighttpHandlers

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

这样:

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

完蛋了。现在,你可以把你的Javascript查看文件夹内,这样将它们链接:

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

感谢Vadym Nikolaiev这个解决方案,他贴here

相关问题