Вы можете создать новую страницу Layout
и обернуть PartialView внутри полного представления, отвечающего за отображение содержимого, а также любых разделов библиотеки.
Например, допустим, у меня есть следующий код:
HomeController.cs
[HttpGet]
public ActionResult About()
{
var vm = new AboutViewModel();
return View("About", vm);
}
Когда отображается представление «Полная страница», оно обычно отображается путем объединения двух файлов:
About.cshtml
@model AboutViewModel
@{
ViewBag.Title = "About CSHN";
}
<h3>@ViewBag.Title</h3>
@section Styles {
<style> /* style info here */ </style>
}
@section Scripts {
<script> /* script info here */ </script>
}
_Layout.cshtml
(или все, что указано в _ViewStart или переопределено на странице)
<!DOCTYPE html>
<html>
<head>
@RenderSection("Styles", false)
<title>@ViewBag.Title</title>
</head>
<body>
@RenderBody()
@RenderSection("scripts", false)
</body>
</html>
Теперь . Предположим, вы хотели визуализировать About.cshtml
как Частичное представление , возможно, как модальное окно в ответ на вызов AJAX. Цель здесь состоит в том, чтобы возвращать только содержимое, указанное на странице about, сценарии и все остальное, без всего содержимого, включенного в основной макет _Layout.cshtml
(например, полный документ <html>
).
Вы можете попробовать это так, но это не будет идти ни с одним из блоков раздела:
return PartialView("About", vm);
Вместо этого добавьте более простую страницу макета, например:
_PartialLayout.cshtml
<div>
@RenderBody()
@RenderSection("Styles", false)
@RenderSection("scripts", false)
</div>
Или для поддержки модального окна, например:
_ModalLayout.cshtml
<div class="modal modal-page fade" tabindex="-1" role="dialog" >
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">@ViewBag.Title</h4>
</div>
<div class="modal-body">
@RenderBody()
@RenderSection("Styles", false)
@RenderSection("scripts", false)
</div>
<div class="modal-footer">
<button type="button" class="btn btn-inverse" data-dismiss="modal">Dismiss</button>
</div>
</div>
</div>
</div>
Затем вы можете указать собственный Master View в этом контроллере или любом другом обработчике, для которого вы хотите одновременно визуализировать содержимое и сценарии представления
[HttpGet]
public ActionResult About()
{
var vm = new AboutViewModel();
return !Request.IsAjaxRequest()
? View("About", vm)
: View("About", "~/Views/Shared/_ModalLayout.cshtml", vm);
}