我公司的标准是将与一个页面或视图唯一关联的JavaScript文件放在该页面或视图所在的同一文件夹中。现在我们正在迁移到MVC,我们希望继续这样做。例如,如果有文件
〜/查看/客户/ CustomerMgmt.cshtml
我需要能够引用以下相关的脚本文件:
〜/查看/客户/ CustomerMgmt.js
此js文件具有仅属于CustomerMgmt.cshtml的功能,该文件将不会被共享,因此没有其他消费者会使用它。如果我使用以下内容引用JavaScript文件,则会因404错误而失败:
<script type = "text/JavaScript" src = "@Url.Content( "~/Views/Customer/CustomerMgmt.js" )">< /script>
我在研究后尝试的解决方案包括:
&LT; add name =“BlockViewHandler”path =“”verb =“”preCondition =“integratedMode”type =“System.Web.HttpNotFoundHandler”/&gt;
此选项允许我引用〜/ Views / Customer / CustomerMgmt.js但它不安全
&LT; add name =“JavaScriptHandler”path =“ .js”verb =“”preCondition =“integratedMode”type =“System.Web.StaticFileHandler”/&gt;
我仍然收到404错误。
我选择使用以下修改〜/ views / web.config的说明:
&LT; add name =“JavaScript”path =“*。js”verb =“GET,HEAD”type =“System.Web.StaticFileHandler”/&gt;
&LT; add name =“CSS”path =“*。css”verb =“GET,HEAD”type =“System.Web.StaticFileHandler”/&gt;
&LT; add path =“*。js”verb =“GET,HEAD”type =“System.Web.StaticFileHandler”/&gt;
&LT; add path =“*。css”verb =“GET,HEAD”type =“System.Web.StaticFileHandler”/&gt;
&LT; add path =“*”verb =“*”type =“System.Web.HttpNotFoundHandler”/&gt;
进行此更改后,我收到500错误以及以下(简要说明):
检测到的ASP.NET设置不适用于集成管理管道模式
我收到了以下建议:
一个。将配置迁移到system.webServer / handlers部分
湾通过设置&lt;忽略此错误system.webServer&gt;,&lt;验证validateIntegratedModeConfiguration =“false”/&gt;
℃。将应用程序切换到经典模式应用程序池
使用选项“b”后,一切似乎都运行正常,我可以引用〜/ Views / Customer / CustomerMgmt.js,但我看到有几篇帖子暗示这不是最好的方法。
我的问题是:
此案例的最佳方法是什么?我正在使用MVC 5.2.3
将一个唯一关联的js文件放在与视图相同的文件夹中的做法是不是很糟糕?此文件仅供特定视图使用,我们不希望混乱〜/ Scripts文件夹(或其中的子文件夹)。
我知道我也可以创建一个像“〜/ ViewScripts / ...”这样的新文件夹结构,并将相关的js文件放在那里。如果有必要,我会这样做,但是,如果可能的话,我希望继续遵守公司标准,并将文件(仅供特定视图使用)与该视图一起使用。
提前感谢大家。我研究过的一些项目包括:
MVC - Accessing css, image, js files in view folder
Placing js files in the views folder
How to reference javascript file in ASP.NET MVC 2 Views folder?
Where to put view-specific javascript files in an ASP.NET MVC application?
Cannot load resource MVC 4 JavaScript
Can I deploy a javascript file within MVC areas?
答案 0 :(得分:0)
从this forum中,我设法获得了一些似乎可以完成工作的代码。我在ViewComponent中使用它。我有一个用于该组件的文件夹,并希望将所有文件合并到一个文件夹中,例如
假设一致的命名约定,我为此加载了它,它不需要对web.config进行任何更改,也不需要打开客户端即可加载 other .js文件。
<script>
@{ Html.RenderPartial(Regex.Replace(ViewContext.ExecutingFilePath, @"\.[^.]+$", @".js")); }
</script>