Кто-нибудь знает, как передать массив C # ASP.NET в массив JavaScript? Пример кода тоже подойдет.
Извините, если раньше я был расплывчатым, ребята. Вопрос на самом деле довольно прост. Скажем для простоты, что в моем файле aspx.cs
я объявляю:
int [] numbers = new int[5];
Теперь я хочу передать числа
на сторону клиента и использовать данные в массиве в JavaScript. Как мне это сделать?
Вы можете использовать ClientScript.RegisterStartUpScript для вставки JavaScript на страницу в Page_Load.
Вот ссылка на ссылку MSDN: http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx
Вот код в Page_Load:
List<string> tempString = new List<string>();
tempString.Add("Hello");
tempString.Add("World");
StringBuilder sb = new StringBuilder();
sb.Append("<script>");
sb.Append("var testArray = new Array;");
foreach(string str in tempString)
{
sb.Append("testArray.push('" + str + "');");
}
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "TestArrayScript", sb.ToString());
Примечания: Используйте StringBuilder для создания строки сценария, поскольку она, вероятно, будет длинной.
А вот Javascript, который проверяет внедренный массив testArray, прежде чем вы сможете с ним работать:
if (testArray)
{
// do something with testArray
}
Здесь есть 2 проблемы:
Некоторые считают, что внедрение Javascript в C # навязчиво
объявить массив в глобальном контексте
. Если вы не можете жить с этим, другим способом было бы, чтобы код C # сохранял массив в состояние просмотра, а затем заставлял JavaScript использовать PageMethods (или веб-службы) для обратного вызова на сервер, чтобы получить этот объект состояния просмотра в виде массива. Но я думаю, что для чего-то вроде этого это может быть излишним.
В файле подкачки:
<script type="text/javascript">
var a = eval('[<% =string.Join(", ", numbers) %>]');
</script>
в то время как в коде позади:
public int[] numbers = WhatEverGetTheArray();
сериализовать его с помощью класса System.Web.Script.Serialization.JavaScriptSerializer
и присвоить javascript var
dummy sample:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;
Это дополняет ответ zerkms.
Чтобы передавать данные через языковые барьеры, вам понадобится способ представления данных в виде строки путем сериализации данных. Одним из методов сериализации для JavaScript является JSON.В примере с zerkms код будет помещен внутри страницы aspx. Чтобы объединить его и ваш пример на одной aspx-странице, у вас будет,
<%
int[] numbers = new int[5];
// Fill up numbers...
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
%>
где-нибудь позже на aspx-странице
<script type="text/javascript">
var jsVariable = <%= serializer.Serialize(numbers) %>;
</script>
Однако этот ответ предполагает, что вы генерируете JavaScript из начальной загрузки страницы. Согласно комментариям в вашем сообщении, это можно было сделать через AJAX. В этом случае сервер должен ответить результатом сериализации, а затем десериализовать его в JavaScript, используя ваш любимый фреймворк.
Примечание: также не отмечайте это как ответ, так как я хотел, чтобы подсветка синтаксиса сделала другой ответ более понятным.