【问题标题】:How to render partial Views Sections in main layout file如何在主布局文件中呈现部分视图部分
【发布时间】:2014-10-02 11:00:28
【问题描述】:

我正在使用 asp.net MVC 5。

我有一个 _layout 文件如下:

    <!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)
            });
}

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

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

但是我怎样才能做到这一点呢?

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-partialview


【解决方案1】:

你应该放置:

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

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

【讨论】:

  • 没有我想要的那么优雅,但我想它会完成这项工作。谢谢
  • 正确,省略@section 脚本,它将部分实现脚本位置
猜你喜欢
  • 2012-11-25
  • 2015-02-26
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2016-06-22
相关资源
最近更新 更多