Razor 如何避免在MVC视图中重复相同的脚本和样式部分

Razor 如何避免在MVC视图中重复相同的脚本和样式部分,razor,asp.net-mvc-5,Razor,Asp.net Mvc 5,我有一个MVC5项目(.NET Framework),其中一组视图具有相同的@节样式和@节脚本块 @section styles { <link href="~/Content/DataTables/css/jquery.dataTables.css" rel="stylesheet" /> <link href="~/Content/DataTables/css/buttons.dataTables.css" rel="stylesheet" /> }

我有一个MVC5项目(.NET Framework),其中一组视图具有相同的
@节样式
@节脚本

@section styles {
    <link href="~/Content/DataTables/css/jquery.dataTables.css" rel="stylesheet" />
    <link href="~/Content/DataTables/css/buttons.dataTables.css" rel="stylesheet" />
}
@section scripts {
    <script src="~/Scripts/DataTables/jquery.dataTables.js"></script>
    <script src="~/Scripts/DataTables/dataTables.buttons.js"></script>
    <script src="~/Scripts/DataTables/buttons.print.js"></script>
    <script src="~/Scripts/DataTables/buttons.html5.js"></script>
    <script src="~/Scripts/jszip.js"></script>
    <script>
        $(() => {
            // source js file defined in BundleConfig.cs
            TableController.init();
        });
    </script>
}
@节样式{
}
@节脚本{
$(() => {
//BundleConfig.cs中定义的源js文件
TableController.init();
});
}
正如一个
TableController.init()
jQuery函数位于一个位置,可以在我选择的任何视图中调用一样,有没有一种方法可以使这组
元素只有一个定义,并且可以在我选择的任何视图中调用它?我没有把它放在
\u布局文件中的原因是,我可能不希望它出现在所有视图上——只是大多数视图

我不知道这种技术叫什么,甚至不知道它在MVC中是否可行。我只是觉得这是避免重复我自己的一个有用的方法。此外,如果我想进行任何调整,我只会在一个地方进行更改,而不会在多个视图中进行更改


有没有一种技巧可以用来实现这个目标

不漂亮:您可以使用partialview,并在需要链接的视图中使用它。
将您的partialview放入共享文件夹。
然后在视图中调用它
@wait Html.PartialAsync(“\u SomeNamePartial”)

更漂亮:将所有css放在一个文件中,将所有javascript放在一个文件中


最好的方式,也应该是:你的方式,@section的存在是有原因的。

不漂亮:你可以使用partialview,并在你想要链接的视图中使用它。
将您的partialview放入共享文件夹。
然后在视图中调用它
@wait Html.PartialAsync(“\u SomeNamePartial”)

更漂亮:将所有css放在一个文件中,将所有javascript放在一个文件中


最好的方法应该是:你的方法,@section的存在是有原因的。

你可以为你想要的任何东西创建捆绑包,你可以为一个区域或一个页面创建捆绑包

//scripts
    bundles.Add(new ScriptBundle("~/bundles/Custom").Include(
                    "~/Scripts/Custom.js"));
    bundles.Add(new ScriptBundle("~/bundles/Custom2").Include(
                    "~/Scripts/Custom2.js"));
//styles
    bundles.Add(new StyleBundle("~/Content/Custom").Include(
                           "~/Content/Custom.css"));
    bundles.Add(new StyleBundle("~/Content/Custom2").Include(
                           "~/Content/Custom2.css"));
现在,您可以分离这些脚本和样式,并仅在需要的页面上添加它们

另外,我认为在head标记中的_Layout.cshtml中定义两个部分是很好的

<head>
    //other scripts and styles here
    @RenderSection("scriptslib", required: false)
    @RenderSection("csslib", required: false)
</head>
通过这样做,您可以根据自己的意愿为部分或页面构建完整的捆绑包

**

编辑:谢谢阿德里安

** 您可以使用通配符为将来的脚本添加捆绑包作为文件夹,这样就不必重新编译,还可以在每个文件夹中放置custom.js和custom.css,以便将来进行编辑或添加覆盖

添加自定义文件夹:

  • 剧本

    • 习俗
      • YourFiles.js
      • YourFiles.min.js
  • 内容

    • 习俗
      • YourFiles.css
      • YourFiles.min.css
自定义捆绑包:

现在,您在这些文件夹中放置的任何内容都将通过IIS应用程序重新启动进行处理,我通常会在应用程序中添加一个函数,以便能够执行应用程序重新启动


希望这有帮助

您可以为任何需要的内容创建捆绑包,也可以为某个区域或单个页面创建捆绑包

//scripts
    bundles.Add(new ScriptBundle("~/bundles/Custom").Include(
                    "~/Scripts/Custom.js"));
    bundles.Add(new ScriptBundle("~/bundles/Custom2").Include(
                    "~/Scripts/Custom2.js"));
//styles
    bundles.Add(new StyleBundle("~/Content/Custom").Include(
                           "~/Content/Custom.css"));
    bundles.Add(new StyleBundle("~/Content/Custom2").Include(
                           "~/Content/Custom2.css"));
现在,您可以分离这些脚本和样式,并仅在需要的页面上添加它们

另外,我认为在head标记中的_Layout.cshtml中定义两个部分是很好的

<head>
    //other scripts and styles here
    @RenderSection("scriptslib", required: false)
    @RenderSection("csslib", required: false)
</head>
通过这样做,您可以根据自己的意愿为部分或页面构建完整的捆绑包

**

编辑:谢谢阿德里安

** 您可以使用通配符为将来的脚本添加捆绑包作为文件夹,这样就不必重新编译,还可以在每个文件夹中放置custom.js和custom.css,以便将来进行编辑或添加覆盖

添加自定义文件夹:

  • 剧本

    • 习俗
      • YourFiles.js
      • YourFiles.min.js
  • 内容

    • 习俗
      • YourFiles.css
      • YourFiles.min.css
自定义捆绑包:

现在,您在这些文件夹中放置的任何内容都将通过IIS应用程序重新启动进行处理,我通常会在应用程序中添加一个函数,以便能够执行应用程序重新启动


希望这有帮助

试试pool pro的想法,这是一个很好的答案。对我来说,我只是更喜欢使用局部视图来引用它

为什么?


修改c#文件并添加另一个CSS或JS文件后,需要再次编译代码。如果使用部分视图,则无需再次编译项目,只需更改视图并上载即可。

试试pool pro的想法,这是一个很好的答案。对我来说,我只是更喜欢使用局部视图来引用它

为什么?


修改c#文件并添加另一个CSS或JS文件后,需要再次编译代码。如果使用局部视图,则无需再次编译项目,只需更改视图并上载即可。

您可以在不同的布局中定义这些视图,并可以指定视图将使用的布局。你也可以。创建捆绑包。@StephenMuecke——这是我需要的名词。这个过程有很多答案,但这可能就是诀窍。您可以在不同的布局中定义它们,并可以指定视图将使用的布局。你也可以。创建捆绑包。@StephenMuecke——这是我需要的名词。这个过程有很多答案,但这可能就是诀窍。很好的一点,我以前就想到过,但我的回答中没有提到,你可以使用文件夹和通配符来添加你的部分,所以如果你需要添加它,你只需将它放在文件夹中,通常我会添加一个空的custom.js或custom.css文件,以便以后添加内容。唯一的问题是重新启动应用程序以添加文件。我通常把它添加到我的应用程序中来重新启动IIS池