Передача массива ASP.NET ASP.NET в массив Javascript
Кто-нибудь знает, как передать массив ASP.NET ASP.NET в массив JavaScript? Пример кода также будет приятным.
Извините, если я был расплывчатым раньше, ребята. Вопрос на самом деле довольно прост. Скажем, для простоты, что в моем файле aspx.cs
я объявляю:
int [] numbers = new int[5];
Теперь я хочу передать numbers
на клиентскую сторону и использовать данные в массиве в JavaScript. Как мне это сделать?
Ответы
Ответ 1
Вы можете использовать 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 для создания строки script, поскольку она, вероятно, будет длинной.
И вот Javascript, который проверяет введенный массив "testArray", прежде чем вы сможете с ним работать:
if (testArray)
{
// do something with testArray
}
Здесь 2 проблемы:
-
Некоторые считают, что это интрузивно для С# для ввода Javascript
-
Мы должны объявить массив в глобальном контексте
Если вы не можете с этим жить, другим способом было бы иметь код С#, который сохранит Array в состоянии просмотра, а затем используйте JavaScript PageMethods (или веб-службы), чтобы перезвонить на сервер, чтобы получить это состояние просмотра объект как массив. Но я думаю, что это может быть излишним для чего-то подобного.
Ответ 2
сериализуйте его с помощью класса System.Web.Script.Serialization.JavaScriptSerializer
и назначьте javascript var
фиктивный образец:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;
Ответ 3
Это добавление ответа 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, используя свою любимую фреймворк.
Примечание. Также не отмечайте это как ответ, так как я хотел, чтобы подсветка синтаксиса сделала другой ответ более понятным.
Ответ 4
В файле страницы:
<script type="text/javascript">
var a = eval('[<% =string.Join(", ", numbers) %>]');
</script>
а в коде позади:
public int[] numbers = WhatEverGetTheArray();
Ответ 5
Для массива объектов:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)'.replace(/"/g, "\""));
Для массива int:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)');
Ответ 6
Подготовьте массив (в моем случае это массив 2d):
// prepare a 2d array in c#
ArrayList header = new ArrayList { "Task Name", "Hours"};
ArrayList data1 = new ArrayList {"Work", 2};
ArrayList data2 = new ArrayList { "Eat", 2 };
ArrayList data3 = new ArrayList { "Sleep", 2 };
ArrayList data = new ArrayList {header, data1, data2, data3};
// convert it in json
string dataStr = JsonConvert.SerializeObject(data, Formatting.None);
// store it in viewdata/ viewbag
ViewBag.Data = new HtmlString(dataStr);
Разберите его в представлении.
<script>
var data = JSON.parse('@ViewBag.Data');
console.log(data);
</script>
В вашем случае вы можете напрямую использовать имя переменной вместо ViewBag.Data.
Ответ 7
Я столкнулся с подобной ситуацией, и я спокойно ее разрешил. Вот что я сделал. Предполагая, что у вас уже есть значение в массиве на странице aspx.cs
.
1) Поместите скрытое поле на страницу aspx и нам скрытый идентификатор поля, чтобы сохранить значение массива.
HiddenField2.Value = string.Join(",", myarray);
2) Теперь, когда скрытое поле имеет сохраненное значение, просто разделяется запятыми. Используйте это скрытое поле в JavaScript, как это. Просто создайте массив в JavaScript, а затем сохраните значение в этом массиве, удалив запятые.
var hiddenfield2 = new Array();
hiddenfield2=document.getElementById('<%=HiddenField2.ClientID%>').value.split(',');
Это должно решить вашу проблему.