我使用的是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)
});
}
所以现在我的问题是部分视图中的部分没有在主布局文件中呈现。我理解为什么我认为......
因为我在另一个控制器中呈现它。然后传递它。
但我怎样才能做到这一点?
答案 0 :(得分:3)
你应该放置:
@section scripts
{
@Scripts.Render("~/bundles/script/datatable")
}
在主视图中,但是ajax请求只返回部分没有布局,所以mvc不知道应该在哪里渲染这个脚本部分。在此ajax请求@RenderSection("scripts", required: false)
永远不会被评估。如果你在你的部分中省略@section scripts
,它可能会有效,但是这不是很好的包含在ajax响应中的js,所以如果你不需要那就不要这样做。