Привет, ребята! У меня возникла проблема с передачей данных между серверной и клиентской частью. На сервере я создаю список объектов на C#:
List<string> myList = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
foreach (var item in dataSource)
{
myList.Add(item.Name);
}
}
А на клиенте хочу обработать эти данные в JavaScript:
function processData(data) {
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
}
}
Как мне правильно передать этот список из C# в JavaScript? Нужно ли генерировать весь JS-код на сервере или есть другой способ? Буду благодарен за любые идеи!
Я обычно использую AJAX для таких задач. На сервере создаешь контроллер или веб-метод, который вернет JSON. На клиенте делаешь запрос к этому методу через fetch или $.ajax. Получаешь данные и обрабатываешь. Плюс в том, что не надо генерить JS на сервере и можно подгружать данные асинхронно. Минус - дополнительный запрос, но это редко проблема.
Можно передать массив через JSON. Сериализуй список с помощью JsonConvert.SerializeObject(myList) и помести результат в скрытый элемент. Затем на клиенте получи значение и вызови JSON.parse для преобразования в массив. Такой способ прост и эффективен.
на самом деле есть несколько вариантов решения этой задачи. я бы посоветовал использовать ViewState - это встроенный механизм asp.net для хранения данных между запросами.
в коде страницы можно сохранить список в ViewState:
ViewState["MyList"] = myList;
а потом на клиенте получить его через:
var data = <%= JsonConvert.SerializeObject((List<string>)ViewState["MyList"]) %>;
и дальше уже работать с этими данными в javascript как обычно. этот способ прост в реализации и не требует дополнительных запросов