MVC AJAX возвращает частичное с макетом, а не как частичное - PullRequest
0 голосов
/ 25 мая 2018

У меня есть веб-сайт MVC с домашним контроллером и погодным контроллером.Домашний контроллер загружает стартовую страницу (индекс) и предоставляет несколько вариантов, которые все загружают контент через ajax.load таким образом:

<li onclick="LoadContent('/Weather/Weather');">...</li>

LoadContent выполняет следующие действия:

function LoadContent(url){
    try {
        $("#divMainContent").load(url, function () {
            //do visual graphic stuff here
            ...
        });
    } ...
}

Контроллер / вид Погода / Погода вызывает API-интерфейс погоды на бэкэнде и передает модель следующим образом:

public ActionResult Weather()
    {
        //api stuff
        ...
        return View(weatherObj);
        //return View("_webcams", weatherObj);
    }

Когда я нажимаю на элемент списка, чтобы загрузить нужную часть, оназагружает представление Weather / Weather.cshtml.Он включает в себя следующее:

<div id="tabs">
    <ul>
        <li>...</li>
        <li><a href="#tabs-6">Webcams</a></li>
    </ul>
    ...
    <div id="tabs-6">
        @Html.Partial("~/Views/Weather/_webcams.cshtml")
    </div>
</div>

Это макет вкладки jquery ui.Работает отлично.Часть _webcams.cshtml содержит загрузочную карусель.

Посмотрев на ответ ajax, частичный вызов HTML возвращает полный макет (который снова включает в себя загрузку, таким образом нарушая карусель).Чтобы убедиться в этом, я попытался заставить контроллер погоды / погоды / точку действия непосредственно к частичному (как комментарий выше), и карусель работает, когда я перехожу непосредственно к погоде / погоде (таким образом проверяя, что мои частичные объекты включают окружающее _layout.cshtml code.

Я пробовал решения здесь , но я либо делаю это неправильно (говорю частичному, чтобы не использовать макет), либо функцию $ (). load ()ведет себя не так, как обычный вызов ajax.

Может ли кто-то пролить свет на то, что происходит?

1 Ответ

0 голосов
/ 25 мая 2018

Существует четкая разница между $().load() и $.ajax.

Я не знаю, в чем разница под капотом, но изменение моего $().load на $.ajax вызов решило проблему.

...