参考视图文件夹中的JavaScript文件 - MVC 5

时间:2016-11-08 20:47:01

标签: javascript c# asp.net-mvc razor asp.net-mvc-5

我公司的标准是将与一个页面或视图唯一关联的JavaScript文件放在该页面或视图所在的同一文件夹中。现在我们正在迁移到MVC,我们希望继续这样做。例如,如果有文件

〜/查看/客户/ CustomerMgmt.cshtml

我需要能够引用以下相关的脚本文件:

〜/查看/客户/ CustomerMgmt.js

此js文件具有属于CustomerMgmt.cshtml的功能,该文件将不会被共享,因此没有其他消费者会使用它。如果我使用以下内容引用JavaScript文件,则会因404错误而失败:

<script type = "text/JavaScript" src = "@Url.Content( "~/Views/Customer/CustomerMgmt.js" )">< /script>

我在研究后尝试的解决方案包括:

  1. 将JavaScript引用添加到BundlerConfig.RegisterBundles并在CsHtml中使用Scripts.Render:我仍然收到404错误。
  2. 删除〜/ views / web.config附带的过滤器:
  3. &LT; add name =“BlockViewHandler”path =“”verb =“”preCondition =“integratedMode”type =“System.Web.HttpNotFoundHandler”/&gt;

    此选项允许我引用〜/ Views / Customer / CustomerMgmt.js但它不安全

    1. 使用黑名单而非白名单仅阻止* .CsHtml文件:这可能会允许将来添加的其他扩展程序,而不仅仅是* .Css和* .Js
    2. 将以下内容添加到处理程序部分:
    3. &LT; add name =“JavaScriptHandler”path =“ .js”verb =“”preCondition =“integratedMode”type =“System.Web.StaticFileHandler”/&gt;

      我仍然收到404错误。

      1. 添加自定义代码以便能够引用我需要的文件(帮助程序,jScript控制器等)
      2. 我选择使用以下修改〜/ views / web.config的说明:

        1. 在里面添加以下内容&lt; system.webServer&gt;&lt;处理程序&GT;:
        2. &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;

          1. 在里面添加以下内容&lt;的System.Web&GT;&LT; HttpHandlers的&GT;:
          2. &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,但我看到有几篇帖子暗示这不是最好的方法。

            我的问题是:

            1. 此案例的最佳方法是什么?我正在使用MVC 5.2.3

            2. 将一个唯一关联的js文件放在与视图相同的文件夹中的做法是不是很糟糕?此文件仅供特定视图使用,我们不希望混乱〜/ Scripts文件夹(或其中的子文件夹)。

            3. 我知道我也可以创建一个像“〜/ 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?

              Serving static file on ASP.NET MVC (C#)

              Serving static file on ASP.NET MVC (C#)

1 个答案:

答案 0 :(得分:0)

this forum中,我设法获得了一些似乎可以完成工作的代码。我在ViewComponent中使用它。我有一个用于该组件的文件夹,并希望将所有文件合并到一个文件夹中,例如

  • \ Component \
  • \ Component \ Component.cshtml
  • \ Component \ Component.js
  • \ Component \ ComponentModel.js
  • \ Component \ ComponentController.js

假设一致的命名约定,我为此加载了它,它不需要对web.config进行任何更改,也不需要打开客户端即可加载 other .js文件。

<script>
    @{ Html.RenderPartial(Regex.Replace(ViewContext.ExecutingFilePath, @"\.[^.]+$", @".js")); }
</script>