ViewBag
существует только в контексте представления Razor, которое само существует, только если вы возвращаете View()
, PartialView()
и т. Д. Если вы возвращаете JSON, это все, что вы получите.Вы не можете использовать ViewBag
.
Тем не менее, я думаю, что вы, в общем, запутались в том, как все работает.Изначально ваше приложение отвечает HTML-документом.Все остальное, ваши действия, представление и т. Д. - все о том, как добраться до этого HTML-документа, который в конечном итоге может быть возвращен клиенту, в данном случае веб-браузеру.
После отправки этого ответа.Сервер готов.Клиентский веб-браузер анализирует документ и создает различные объектные модели: DOM, CSSOM и т. Д. Затем он использует эти объектные модели для визуализации страницы (рисования).Во время и после этого процесса ваш JavaScript запускается.Все это происходит на стороне клиента, а сервер не знает и не заботится;он уже сделал свою работу.
Затем вам нужна новая информация с сервера.Это требует нового запроса от клиента, что приведет к новому ответу от сервера.Этот запрос может быть выполнен в форме навигации пользователем в браузере (в этом случае изменится весь вид окна / вкладки браузера) или в форме запроса AJAX, который оставляет текущий вид в окне / вкладке браузера как-is.
XMLHttpRequest
, фактический клиентский класс JavaScript, отвечающий за выполнение AJAX-запросов, и называется «тонким клиентом».Он делает запросы и получает ответы, но он ничего не делает с указанным ответом, в отличие от «толстого клиента», такого как веб-браузер, который принимает ответ и выполняет все создание и рендеринг объектной модели.Вместо этого функция обратного вызова просто вызывается.Вы несете ответственность за то, чтобы что-то сделать в этом обратном вызове с полученным ответом (обновить DOM и т. Д.)имеет абсолютно нулевой смысл, потому что вид не меняется.Вы, кажется, представляете, что изменение ViewBag
каким-то образом автоматически обновит что-то на странице, которая ранее была добавлена с помощью ViewBag
в вашем первоначальном представлении Razor.Дело не в этом, и дело обстоит не так.Если вы хотите что-то изменить на странице, новое значение должно возвращаться как часть ответа JSON от вашего запроса AJAX, а затем вы должны использовать это новое значение для соответствующего изменения DOM.