#asp.net-mvc
#asp.net-mvc
Вопрос:
Я новичок в MVC, и я внедряю веб-приложение с большим количеством AJAX и частичных представлений.
У меня есть 2 вида: 1 базовый вид и 1 частичный вид. У каждого вида есть свой собственный контроллер. Базовое представление отправляет данные в частичное представление через модель.
Я хотел бы заставить частичный вид / контроллер отправлять данные в базовый вид / контроллер. Каков наилучший способ сделать это? Есть ли способ обновить базовый вид из действия частичного просмотра?
public ActionResult SendDataToBaseView()
{
return View("BaseView", viewModel);
}
Ответ №1:
Не совсем ясно, какова ваша настройка.
Если вы обновляете HTML, который был отрисован из основного вида, то, скорее всего, у вас будет другое действие контроллера на том же контроллере, на котором вы вызвали действие для отрисовки базового вида. Это другое действие контроллера может возвращать JSON или HTML (возможно, в виде частичного представления), и на стороне клиента будет лежать ваша ответственность за получение результата вызова AJAX и заполнение разделов страницы, которые были отрисованы базовым представлением, этими новыми данными.
Вот шаги, которые я бы предположил предпринять
- Действие контроллера вызывается для отображения базового вида. Давайте вызовем контроллер
BaseController
и действиеIndex
- Внутри базового представления выполняется вызов для отображения частичного представления через
Html.RenderPartial()
,Html.RenderAction()
илиHtml.Action()
- Клиенту отправляется ответ
- На клиенте происходит событие, требующее обновления данных, отображаемых базовым видом.
- Запрос AJAX выполняется к
BaseController
Update
действию, которое возвращаетJsonResult
данные, которые могут быть использованы для обновления частей ответа, выводимого базовым видом. - Получите ответ на стороне клиента и обновите эти части DOM.
Комментарии:
1. спасибо, Расс, за ответ. моя проблема заключается в том, как обновить весь базовый вид (т. Е. return View()) вместо обновления только части вида (т. Е. return PartialView()) в действии, вызываемом AJAX? Сложность для меня в том, что это действие было вызвано AJAX, и ожидается, что оно обновит только часть представления, но не все представление, как мне нужно сделать.