JoshWigley Ответов: 0

Как добавить данные массива JSON в viewbag, который находится в цикле foreach в MVC


Черт возьми, все!

Я все еще новичок в MVC, поэтому пытаюсь выяснить различные варианты, которые в настоящее время не могу найти, которые изначально были в WinForms.

Все, что мне нужно сделать, это добавить текст в ViewBag, а не просто перезаписать Предыдущее значение.

Сценарий:

- Веб-запрос вызывает API для извлечения данных, которые являются объектом JSON, хранящим массив JSON.

- Код (перечисленный ниже) проходит через цикл и помещает текст в ViewBag.

- Веб-страница загружается, но помещает самое последнее значение массива в ViewBag (что я полностью понимаю, потому что я перезаписываю Предыдущее значение в ViewBag).

Все, что я хочу сделать, это добавить дополнительные значения массива в ViewBag, так что если массив содержит 1,2,3,4 объекта, то ViewBag будет отображать 1,2,3,4, а не только 4.

В WinForms я бы сделал что-то простое, например
Textbox1.Text +=alertName.toString();
или в приложении .NET я бы просто использовал
textBox1.AppendText("Some text");


Есть ли аналогичный способ сделать это в MVC?

Что я уже пробовал:

var jsonClient = new WebClient();
            jsonClient.Credentials = new NetworkCredential("XXXX", "XXXX");
            jsonClient.Headers.Set("Content-Type", "application/json");
            jsonClient.Headers.Set("Accept", "application/json");
            var alertsSettings = jsonClient.DownloadString("http://XXXX:XXXX/api/alerts/settings");
            JObject results = JObject.Parse(alertsSettings);

            foreach (var result in results["data"])
            {
                string alertName = (string)result["alertName"];
                ViewBag.alertNameData = alertName.ToString();
            }

F-ES Sitecore

Если вы продолжаете думать в терминах winforms, вы будете бороться с созданием веб-приложения. Приложения Windows отслеживают состояние...все, что вы делаете, сохраняется. Веб-приложения не имеют состояния...все, что вы делаете, немедленно выбрасывается. Причина, по которой вы не можете добавить в свой Viewbag, заключается в том, что ваш viewbag и его содержимое уничтожаются, как только ваша страница была отправлена в клиентский браузер.

Таким образом, вам нужно отправить содержимое того, что было viewbag, в ваш метод, чтобы вы могли добавить к нему и повторно вернуть его. Самый простой способ сделать это-сохранить содержимое viewbag в скрытом элементе ввода, а затем отправить содержимое этого элемента с вашим следующим запросом. Как вы это сделаете, зависит от того, как вы вызываете свой веб-метод, который вы еще не объяснили. Если это нормальная форма, то достаточно поместить скрытый ввод в форму, если это ajax, то вам нужно будет передать содержимое скрытого ввода в параметр данных ajax.

JoshWigley

Спасибо за информацию! Опять же, все это относительно ново для меня, поэтому прошу прощения, если вопрос кажется (скорее всего) совершенно новичком.

Ваш комментарий подтолкнул меня в правильном направлении, и теперь я назначил данные переменной вне цикла, которая достигла именно того, что мне нужно. Возможно, я пытался все усложнить, хотя на самом деле все было невероятно просто.

Если вы поставите свой комментарий в качестве решения, я с радостью приму это как правильный ответ.

Ценю твою помощь, приятель! :)

0 Ответов