2011-11-09 32 views
5

我有我的js文件在区域内,我无法访问它们。当我将它们移到MVC区域之外时,我可以访问它们。我可以在MVC区域内部署JavaScript文件吗?

我曾尝试以下:

  • 的js文件不同的命名 - 不能解决问题
  • 检查,看看是否存在于服务器上 - 它们直接从内部做
  • Access文件服务器上的IIS管理器 - 它们不会打开并返回未找到
  • 直接从服务器上的IIS管理器中访问相同文件,但是当文件位于脚本目录中时 - 它们在浏览器中打开
  • 使用t他的路线检查 - 当我试图访问它不打开文件路径调试,而是只是说“404”

这工作:

<script src="@Url.Content("~/Scripts/jquery/_Roles.js")" type="text/javascript"></script> 

这不起作用:

<script src="@Url.Content("~/Areas/Administration/Scripts/Roles/_Roles.js")" type="text/javascript"></script> 

对于阻止脚本的Areas文件夹下的文件可能有不同的东西吗?

+0

为什么你在文件名中使用下划线? – ZippyV

+0

公约为我。不过,我可能会改变这一点。无论哪种方式,我注意到我仍然有同样的问题。部署后,我的应用程序不喜欢区域中的脚本。然而,在dev服务器上本地运行是可以的。 –

+1

@SamanthaJ @ Url.Content()在客户端呈现什么?也许你的问题在那里。 – shuniar

回答

-3

为什么把你的脚本中地区部分?我有一个带有区域的mvc站点,但我仍然将脚本保留在脚本文件夹中。

我的建议是重新考虑以这种方式组织您的内容的原因,并考虑将所有外部.js文件移动到脚本文件夹。

+2

我至少可以想到一个理由 - 阻止用户不具备管理权限的用户阅读管理面板脚本,这可能会给他们一些想法(路径,功能等)。我真的来到这里寻找有关在MVC区域内存储脚本的信息... –

+12

区域是功能的逻辑分组,因此不考虑实现问题,为什么您不想将区域特定脚本放入区域文件夹?对我来说似乎是常识。 –

+2

如果您的架构遵循使用自治业务组件的SOA风格,这会产生很大的意义 –

0

你有没有尝试

ResolveUrl(

代替

Url.Content( 

斯特凡诺

+0

我现在就试试。该代码正在Azure上运行,因此需要15分钟才能上传。检查文档我不确定它会有帮助,因为它说:如果relativeUrl参数包含一个绝对URL,URL将被返回不变。如果relativeUrl参数包含相对URL,则该URL将更改为相对于当前请求路径正确的相对URL,以便浏览器可以解析URL。 –

0
<script type="text/javascript" src='<%: ResolveUrl("~/Scripts/jquery/_Roles.js") %>'> 
</script> 
1

another Stack Overflow question找到了答案,并调整了区域。

修改/Areas/AreaName/Views/web.config文件,以使服务器无法满足JS和CSS文件:

<system.web> 
    <httpHandlers> 
     <add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 
    <!-- other content here --> 
</system.web> 

<system.webServer> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    <!-- other content here --> 
</system.webServer> 

这将使的.js和.css文件的服务,并且将禁止服务其他的东西。

+0

我将这些更改添加到驻留的web.config中在/Areas/AreaName/web.config中,它也可以工作。 – BrandonG

相关问题