30

我希望能够为部分视图提供一种在视图底部包含 JavaScript 代码/文件的方法。这将使部分视图能够包含它们所依赖的任何 JavaScript 文件。例如,如果我想编写一个需要创建 JQueryUI 对话框的部分,我想导入 JQueryUI JavaScript 文件并添加呈现对话框的 JavaScript 代码。

我目前正在父视图中编写此代码,这使得使用局部视图毫无意义。

我知道RenderPartial多次调用会导致脚本被多次包含。一旦我知道如何将 JavaScript 从局部视图实际包含到主视图中,这是一个可以解决的问题。

4

3 回答 3

7

在 MasterPage (ASPX) 中定义ContentPlaceHolder或在布局页面 (Razor) 中定义Section

ASPX

<body>
  <!-- End of Body -->
  <asp:ContentPlaceHolder ID="JavaScriptIncludes" runat="server" />
</body>

剃须刀

<body>
  <!-- End of Body -->
   @RenderSection("JavaScriptIncludes", required: false)
</body>

然后在部分:

ASPX

<asp:Content ID="ExtraJs" ContentPlaceHolderID="JavaScriptIncludes" runat="server">
   <script type="text/javascript" src="@Url.Content("/Scripts/SomeScript.js")" />
</asp:Content>

剃须刀

@section JavaScriptIncludes
{
   <script type="text/javascript" src="@Url.Content("/Scripts/SomeScript.js")" />
}

还可以考虑使用 HTML Helper 来呈现<script>标签。

于 2011-01-16T22:37:46.143 回答
1

以下是如何使用使用任何库的 JavaScript 代码获得部分视图(即使在页面末尾加载库时

在您的部分视图中添加:

@{
    TempData["Script"] += "MyFunction();";
}

<script type="text/javascript">
    function MyFunction() {
        // you can call your library here, e.g. jquery:
        $(function () {

        });
    }
</script>

在您的_Layout.cshtml页面中,在您包含的库之后添加:

@*LOAD YOUR LIBRARIES HERE (E.G. JQUERY) *@


@if (TempData["Script"] != null)
{
    <script type="text/javascript">
        @Html.Raw(TempData["Script"].ToString())
    </script>
}

您可以有多个局部视图将它们的函数附加到同一个键 TempData["Script"]。如果您继续使用+=运算符添加功能,它们将愉快地共存:

@{
    TempData["Script"] += "AnotherFunction();";
}
于 2016-10-07T06:45:32.763 回答
0

您可以<script>在标签内包含标签,<body>以便将它们放在局部视图中。

于 2011-01-16T20:59:29.350 回答