#c# #javascript #asp.net #arrays
#c# #javascript #asp.net #массивы
Вопрос:
Пытаюсь вернуть этот список в виде массива, чтобы затем я мог получить его на стороне клиента через JS и выполнить итерацию по его значениям.
Итак, один из моих методов .ashx возвращает такой список в конце метода:
equipmentTypes — это общий список строк
_httpContext.Response.ContentType = "text";
_httpContext.Response.Write(equipmentTypes.ToArray());
Когда я получаю его на клиенте, я получаю буквальный текст «System.Строка[]». Итак, какой тип контента я должен вернуть? Очевидно, что это неверно.
Тогда я предполагаю, что могу преобразовать это в массив (объект) на стороне js.
Ответ №1:
Вы должны использовать JSON при отправке данных в javascript. Вы НЕ ДОЛЖНЫ использовать eval, поскольку это открывает вам множество уязвимостей в системе безопасности (например, XSS).
Смотрите эту статью для получения дополнительной информации о C # и JSON, включая преобразование массива C # в JSON.
Ответ №2:
Вам следует сериализовать объекты, которые вы хотите записать в поток ответов, как JSON, тип содержимого которого равен application/json
. Вы можете использовать встроенную сериализацию DataContract или стороннюю библиотеку с открытым исходным кодом, такую как NewtonSoft JSON.Библиотека Net.
На клиенте вы должны использовать JSON.parse
вместо eval
.
Ответ №3:
На стороне сервера вы можете сгенерировать JSON с помощью встроенного JavaScriptSerializer
:
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
_httpContext.Response.ContentType = "application/json";
_httpContext.Response.Write(js.Serialize(equipmentTypes.ToArray()));
И на клиенте вы можете использовать JSON.parse
(поддерживается всеми современными браузерами), чтобы получить массив обратно. eval
на самом деле это не угроза безопасности, когда вы контролируете как клиент, так и сервер, но это все равно неподходящий инструмент для работы.