Многократные частичные представления .NET MVC2 на Master, также индивидуально загружаемые через AJAX - PullRequest
2 голосов
/ 02 марта 2011

Я создаю одностраничный сайт с использованием MVC2, и поэтому несколько разных страниц будут видны, как в HTML div:

==========
|Section1|
|        |
==========
==========
|Section2|
|        |
==========
==========
|Section3|
|        |
==========

Давайте назовем эту целевую страницу / Home / Index - в представлении Home / Index есть только несколько вызовов RenderAction для рендеринга Section1 / Index, Section2 / Index и Section3 / Index - каждый из разделов является контроллером.

В различных точках другая часть Section1, Section2 или Section3 будет загружена в их соответствующие div, сделав Ajax-запрос к / Section1 / Part1 или / Section2 / Part3 и т. Д. И т. Д.

Я уже знаю, что лучший способ загрузить страницу с первого раза - это иметь частичные представления для каждого из этих разделов и помещать их в них.

Но, скажем, я хотел перейти в / Section2 / Part3 без , используя AJAX-запрос, что было бы лучшим способом обеспечить получение Section1, Section2 и Section3 на странице, показывающей, но вместо Частичное представление по умолчанию для Section2, мы показываем Part3.

Любые идеи будут оценены :)

Один из них, который у меня был: каким-то образом возвращался из действий раздела в представлении / Home / Index с данными модели, необходимыми для визуализации указанной части, но я не хочу перенаправлять, поскольку URL-адрес должен оставаться прежним.

Надеюсь, это имеет смысл. Спасибо:)

P.S. Не используется .NET Ajax.

1 Ответ

3 голосов
/ 02 марта 2011

Я думаю, что ваша проблема может быть решена с помощью Request.IsAjax в ваших методах действий.Если у вас есть запрос AJAX, верните частичное представление.Если нет, верните обычный вид, который включает частичное.

public ActionResult Part1() {
    /* Other code here */

    if(!Request.IsAjax)
        return View("Part1Full");

    return View();
}

В вашем Part1Full виде просто позвоните RenderPartial("Part1")Я предполагаю, что это также будет работать, если вы позвоните RenderAction("Part1"), но если не посмотрите на атрибут [ChildActionOnly].Вы можете найти больше информации об этом здесь .

...