.NET MVC2 Multiple Partial View on Master, также индивидуально загружаемый через AJAX

Я создаю одностраничный сайт с использованием 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.


person basicallydan    schedule 02.03.2011    source источник


Ответы (1)


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

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

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

    return View();
}

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

person Jonathan Freeland    schedule 02.03.2011
comment
Спасибо, Джонатан, именно так я и сделаю :) - person basicallydan; 03.03.2011