如何在主布局文件中渲染局部视图剖面

本文关键字:染局 视图 布局 文件 | 更新日期: 2023-09-27 18:25:23

我使用的是asp.net MVC 5。

我有一个布局文件,如下所示(_L):

    <!DOCTYPE html>
<html lang="en">
<head>
    @Html.Partial("_Head")
    @RenderSection("styles", required: false)
</head>
<body>
   @RenderBody()
 @RenderSection("scripts", required: false)
</body>
</html>

然后我有我的主要观点:

@{
  Layout = "~/Views/Shared/_Layout.cshtml";
  Title = "mainView"
}
  <div class="partialcontents" data-url="/user/UserList"></div>
$(document).ready(function (e) {
            $(".partialcontents").each(
                function (index, item) {
                    var url = $(item).data("url");
                    if (url && url.length > 0) {
                        $(item).load(url, function () { $(this).css("background-image", "none"); });
                    }
                }
            );
        });

这是我的部分观点:

@{
}
<p> Partial View</p>
@section scripts
{
  @Scripts.Render("~/bundles/script/datatable")
}

My controller that renders the partial view:

[Authorize]
        public ActionResult UserList(UsersViewModel model, string sortOrder, string currentFilter, string searchString, int? page)
        {
.... removed for simplicity
 return PartialView("_UserList", new UsersViewModel()
            {
                Users = users.ToPagedList(pageNumber, pageSize)
            });
}

所以现在我的问题是局部视图中的部分没有在主布局文件中呈现。我理解为什么我认为。。。

这是因为我正在另一个控制器中渲染它。然后把它传过去。

但是我该怎么做呢?

如何在主布局文件中渲染局部视图剖面

您应该放置:

@section scripts
{
    @Scripts.Render("~/bundles/script/datatable")
}

在主视图中,因为AJAX请求只返回部分而没有布局,所以MVC不知道应该在哪里呈现这个脚本部分。在这个AJAX请求中,@RenderSection("scripts", required: false)永远不会被求值。如果您在分部中省略@section scripts,它可能会起作用,但这不是在AJAX响应中包含JS的好方法,所以如果您不需要也不要这样做。