Как загрузить частичное представление в контейнер в _Layout.cshtml - PullRequest
0 голосов
/ 15 марта 2012

Здравствуйте, может кто-нибудь сказать, пожалуйста, как я могу загрузить PartialView в подготовленный мной контейнер div, расположенный в _Layout.cshtml (который полностью отделен от самой ссылки).Я хочу, чтобы он был загружен в контейнер по щелчку следующей ссылки действия:

<a href="@Url.Action("RenderColorbox", "ContactPartial", new { path = "_ContactPartial" })" class="colorboxLink"><span>ContactUs</span></a>

Я хотел бы сделать это без JavaScript, потому что мне нужно создать модель в моем контроллере и передать ее в PartialView иЯ не думаю, что возможно передать строго типизированную модель представлению, используя javascript.

Если бы я хотел, я мог бы использовать:

$('.colorboxLink').click(function () {
     $('.colorbox_container').load(this.href);
});

, но, как я уже говорил, это не дает мне возможности создать и передать строго типизированную модель в частичное представление ... ееважно, чтобы я мог создать и передать модель в представление, потому что я получаю исключение нулевой ссылки, когда я пытаюсь что-то вроде foreach (var item в Model.ItemList) в частичном представлении.

Вот как выглядит мой контроллер:

    public virtual ActionResult RenderColorbox(string path)
    {
        return PartialView(path, null);
    }

Однако в настоящее время щелчок по ссылке действия просто отображает PartialView на новой пустой странице, а не в контейнере, который я настроил.

Спасибо всем за помощь.

РЕДАКТИРОВАТЬ: Для загрузки палитры я использовал следующие предложения:

    $('.colorboxLink').click(function () {
    $('.colorbox_container').load(this.href, function () {
        var colorboxOptions = {
            inline: true,
            scrolling: false,
            opacity: ".9",
            fixed: true,
            onLoad: function () {
                $('#cboxContent').css({
                    "background": "white"
                });
                $('#cboxLoadedContent').css({
                    "margin-bottom": "28px",
                    "height": "558px"
                });
            }
        }
        $('#contactColorbox').colorbox(colorboxOptions);


    });

Но все равно загружается без палитры, а скорее как всплывающее модальное окно.

1 Ответ

0 голосов
/ 15 марта 2012

но, как я уже упоминал, это не дает мне возможности создать и передать строго типизированную модель в частичное представление.

Это дает вам такую ​​возможность.Вы отправляете запрос AJAX в действие RenderColorbox на контроллере ContactPartial.Внутри этого действия вы можете подготовить и отправить любую сложную модель представления, которую хотите, в частичное:

public ActionResult RenderColorbox(string path)
{
    SomeComplexModel model = ...
    return PartialView(path, model);
}

Также убедитесь, что вы отменили действие ссылки по умолчанию, вернув false из обработчика щелчков:

$(function() {
    $('.colorboxLink').click(function () {
        $('.colorbox_container').load(this.href);
        return false;
    });
});

Если вы этого не сделаете, при нажатии на ссылку ваш вызов AJAX едва ли будет выполнен до того, как браузер перенаправит вас на целевую страницу.

...