У меня есть приложение MVC 4 (Razor), которое преобразуется, чтобы больше напоминать одностраничное приложение для SPA. Это не чисто SPA-5 страниц, которые используют Ajax для загрузки в разделе тела, тогда как другие одноразовые страницы не должны использовать Ajax.
У меня есть все, кроме домашней страницы индекса. Мне нужно связать назад с индексом, но я бы хотел использовать одну главную страницу макета. Проблема в том, что я не могу понять, как иногда загружать частичные представления, а затем в другое время отображать страницу с помощью мастера компоновки.
Мне нужно сохранить @RenderBody для не-Ajax-страниц.
<body>
<section id="BodySection">
@RenderBody
</section>
</body>
Для страниц Ajax на кнопке навигации нажмите я Ajax на частичный вид в #BodySection, используя JQ.
function LoadPage(actionarg, controllerarg) {
var link = '@(Url.Action("action", "controller"))';
link = link.replace("action", actionarg);
link = link.replace("controller", controllerarg);
$.ajax({
url: link,
type: "POST",
cache: false,
async: true,
data: { data: '' },
success: function (result) {
$("#BodySection").html(result);
}
});
}
Как можно смешивать два типа загрузки страницы?
Не уверен, что это самый практичный способ, но я так понимаю:
Сначала создайте 2 представления, я назову их "page.cshtml" и "partialpage.cshtml" и 2 действия (или вы можете разделить их на 2 контроллера, в зависимости от вашего запроса), позвоните им "somecontroller/page" и "somecontroller/page", somecontroller/partialpage"
partialpage.cshtml:
@{
Layout = "";
}
@*Exact page content here*@
page.cshtml
@{
Layout = "Your master layout directory";
}
@Html.Action("somecontroller","partialpage")
Когда вам нужна страница в виде частичного представления, используйте действие частичной страницы, когда вам нужна полная страница с основным видом, а затем используйте действие страницы.
Это только мой собственный путь, пожалуйста, дайте мне знать, если кто-нибудь знает какой-либо практический путь.
Благодарю.