Как добавить данные массива 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
Спасибо за информацию! Опять же, все это относительно ново для меня, поэтому прошу прощения, если вопрос кажется (скорее всего) совершенно новичком.
Ваш комментарий подтолкнул меня в правильном направлении, и теперь я назначил данные переменной вне цикла, которая достигла именно того, что мне нужно. Возможно, я пытался все усложнить, хотя на самом деле все было невероятно просто.
Если вы поставите свой комментарий в качестве решения, я с радостью приму это как правильный ответ.
Ценю твою помощь, приятель! :)