Как обновить базовый вид из действия частичного просмотра

#asp.net-mvc

#asp.net-mvc

Вопрос:

Я новичок в MVC, и я внедряю веб-приложение с большим количеством AJAX и частичных представлений.

У меня есть 2 вида: 1 базовый вид и 1 частичный вид. У каждого вида есть свой собственный контроллер. Базовое представление отправляет данные в частичное представление через модель.

Я хотел бы заставить частичный вид / контроллер отправлять данные в базовый вид / контроллер. Каков наилучший способ сделать это? Есть ли способ обновить базовый вид из действия частичного просмотра?

         public ActionResult SendDataToBaseView()
        {
            return View("BaseView", viewModel);
        }
  

Ответ №1:

Не совсем ясно, какова ваша настройка.

Если вы обновляете HTML, который был отрисован из основного вида, то, скорее всего, у вас будет другое действие контроллера на том же контроллере, на котором вы вызвали действие для отрисовки базового вида. Это другое действие контроллера может возвращать JSON или HTML (возможно, в виде частичного представления), и на стороне клиента будет лежать ваша ответственность за получение результата вызова AJAX и заполнение разделов страницы, которые были отрисованы базовым представлением, этими новыми данными.

Вот шаги, которые я бы предположил предпринять

  1. Действие контроллера вызывается для отображения базового вида. Давайте вызовем контроллер BaseController и действие Index
  2. Внутри базового представления выполняется вызов для отображения частичного представления через Html.RenderPartial() , Html.RenderAction() или Html.Action()
  3. Клиенту отправляется ответ
  4. На клиенте происходит событие, требующее обновления данных, отображаемых базовым видом.
  5. Запрос AJAX выполняется к BaseController Update действию, которое возвращает JsonResult данные, которые могут быть использованы для обновления частей ответа, выводимого базовым видом.
  6. Получите ответ на стороне клиента и обновите эти части DOM.

Комментарии:

1. спасибо, Расс, за ответ. моя проблема заключается в том, как обновить весь базовый вид (т. Е. return View()) вместо обновления только части вида (т. Е. return PartialView()) в действии, вызываемом AJAX? Сложность для меня в том, что это действие было вызвано AJAX, и ожидается, что оно обновит только часть представления, но не все представление, как мне нужно сделать.